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として利用されていた場合には当然ながらエラーにはなりません。