int main() {
int pid = fork();
if(pid > 0){
kill(pid, SIGKILL);
printf("a");
}else{
/* getppid() returns the pid
of the parent process */
kill(getppid(), SIGKILL);
printf("b");
}
}
的代碼片段可以有一個結果:沒事,A,B,AB,BA使用叉子和殺死信號
我不明白,爲什麼沒有,AB和BA是可能的。
int a = 1;
void handler(int sig){
a = 0;
}
void emptyhandler(int sig){
}
int main() {
signal(SIGINT, handler);
signal(SIGCONT, emptyhandler);
int pid = fork();
if(pid == 0){
while(a == 1)
pause();
printf("a");
}else{
kill(pid, SIGCONT);
printf("b");
kill(pid, SIGINT);
printf("c");
}
}
這一結果是bac,bca。
林不知道爲什麼「一個進程不終止」也有效?爲什麼SIGINT會殺死它?
對於我剛剛添加的第二個片段,kill(pid,SIGINT)會做什麼?感謝您的第一部分順便說一句。 –
它將SIGINT信號發送給進程。 SIGINT與按CTRL + C時發送的信號相同。默認情況下,該信號終止該過程。 – nos
在這個作業題目中,「一個過程不會終止」仍然是一種選擇。如果有SIGINT調用,那怎麼可能? –