no such process

no_such_processのサンプルです。

プロセスIDを指定してプロセスの存在をチェックしています。
指定されたプロセスIDを持つプロセスが無いとエラーが表示され、終了します。

ポイントとしてはkill関数を利用していますが、シグナルを指定する引数へ0を指定しています。

この場合に引数のpidで指定したプロセスIDのプロセスの存在チェックができます。

ちなみにLinux(CentOS)上でのみ動作確認を行っています。

Windowsは面倒なので動作させていないので動くかどうかわかりません。
そもそもkill関数が無かったような気がします。
もし要望があればWindowsでこのエラー発生をチャレンジしてみようかと思います。

スポンサーリンク
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <errno.h>

int main(int argc, char argv[])
{
  int   rc;
  int   pid;
  
  // kill(pid_t pid, int sig); と定義されている。
  // sigに0を指定するとエラーチェックのみ動作するらしい。
  // 適当にpidを指定してそのPIDを持つプロセスが無ければ「no such process」となる
  
  for(pid = 10000; pid <= 20000; pid++){
    // PIDが10000から20000までのプロセスを存在確認
    // プロセスが無い場合にエラーを表示してプログラムが終了
    // もしすべてのプロセスIDが利用されていればエラーは表示されません
    rc = kill(pid, 0);
    if(rc < 0 && errno == ESRCH){
      printf("error! [%m]\n");
      return -1;
    }
  }
  
  return 0;
}

無いとは思いますが、10000~20000まで全てがプロセスIDとして利用されていた場合には当然ながらエラーにはなりません。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする