私は単純なシェルを書いていますが、execv を使用して外部プログラムの子プロセスをフォークする必要があります。シグナル TSTP(Cntl+Z) をシグナル ハンドラーに送信し、現在実行中の子プロセスを強制終了する必要があります。私の問題は、子 pid をシグナル ハンドラーに渡す方法が見つからないことです。ハンドラーで getpid() を実行すると、親の pid が返されます。また、子プロセス内で子 pid を getpid() として設定し、その変数をグローバル変数として設定しようとしましたが、それも機能しませんでした。ここに私がこれまでに持っているコードのいくつかがあります。
void handler(int);
//in main
if (!built_in_cmd(myArgc,myArgs)) {
pid_t pid;
char *x = myArgs[0];
if((pid=fork())<0)
printf("Parent: fork() process failed");
else {
if (pid == 0) {
y=getpid();
printf("Parent: My child has been spawned. %d %d\n",y,getppid());
execv(x, myArgs);
exit(0);
}
else {
signal(SIGTSTP,handler);
wait(0);
printf("Parent: My child has terminated.\n");
}
}
}
return;
//outside main
void handler(int signo){
kill(idk,SIGKILL);
}