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