ここで小さな単体テストを試みています。しかし、プログラムは期待どおりに動作しません。
char *args[2];
args[0] = (char*)"/usr/bin/firefox";
args[1] = NULL;
pid = fork();
printf("forked and my pid is %d\n",pid);
//check for errors
if (pid<0){
printf("Error: invoking fork to start ss has failed, Exiting\n ");
exit(1);
}
//the child process runs firefox
if (pid==0){
if (execv(args[0],args)<0){
perror("Error: running s with execvp has failed, Exiting\n");
}
printf("IVE BEEN KILLED\n");
}
//dad is here
printf("DAD IS GOING TO KILL U\n");
if (pid>0){
sleep(3);
kill(get_pidof(string("firefox")),SIGUSR1);
}
さて、私はプログラムが次のように実行されることを期待しています: 4.子プロセスはexecvの実行を終了し、「IVE BEEN KILLED」を出力します。これは起こりません。
私の目的は、execv が実行を継続した直後にいくつかのフラグを立てて、execv が実行したプログラムが終了したことを知ることです (printf が強制終了された場所)。数千行のコードがあり、必要でない限り他の方法を使用したくありません。
ありがとう