如何在发送带键击的中断时杀死子进程,然后向父进程发送子进程被杀死的信号?
答案 0 :(得分:2)
无论何时儿童死亡,父进程通常都会收到信号。这是SIGCHLD信号。
此信号可以被父进程阻止,但是当孩子出于任何原因退出时,它总是被传递。家长可以通过使用wait
家庭之一(又名wait
,wait3
,wait4
或waitpid
)来判断孩子退出的原因代码。
答案 1 :(得分:0)
让子进程获得焦点可能是一个挑战,因此它会获得键盘事件。
您始终可以使用kill
命令向给定进程发送信号。不要让名称kill误导你,你可以用kill,kill -SIGNUM pid
发送任何信号,但SIGTERM是默认值,这通常会导致进程退出。
因此,如果您想向进程11发送SEGV信号,那么
kill -SEGV 11
您可以设置父级来捕获信号,通过调用kill(2)将其重新发送给孩子,然后等待孩子使用waitpid退出。
父母的信号处理程序会像这样:
int status;
kill(child_pid, SIG_TO_SEND);/*send to child*/
waitpid(child_pid, &status);/* wait for child to give up */
如果你认真对待父母,并且知道信号仅针对孩子,你可能在父母中设置一个变量,退出信号处理程序,然后完成发送和等待的工作。儿童。一般来说,尽可能快地离开信号处理程序是件好事。