当前位置: 技术问答>linux和unix
操作系统初学者,Linux一些不懂的地方
来源: 互联网 发布时间:2016-07-04
本文导语: 如果按下面的代码,在Linux系统下运行, 在5秒内按下"ctrl + c"产生中断的结果是: This is parent process, pid = 一个整数, This is child process 1 pid = 一个整数, This is child process 2 pid = 一个整数, Parent process will be ki...
如果按下面的代码,在Linux系统下运行,
在5秒内按下"ctrl + c"产生中断的结果是:
This is parent process, pid = 一个整数,
This is child process 1 pid = 一个整数,
This is child process 2 pid = 一个整数,
Parent process will be killed, The children will be killed first!
这个结果我知道...
----------------------------------------------------------------------------
现在我把函数parent_stop()中的 "exit(0);" 去掉,
然后也同样的运行时按下"ctrl + c"产生中断,
执行的结果是这样的:
This is parent process, pid = 一个整数,
This is child process 1 pid = 一个整数,
This is child process 2 pid = 一个整数,
Parent process will be killed, The children will be killed first!
Parent process (pid = 一个整数) finished! //比上面的结果多出来的
-----------------------------------------------------------------------------------
打印出来了这句:Parent process (pid = 一个整数) finished!
说明在执行parent_stop后,程序返回,执行下面语句
我不明白的是,为什么执行了
kill(pid1, SIGUSR1);
kill(pid2, SIGUSR2);
这两句,给两个子进程发送了SIGUSR1,SIGUSR2信号,
为什么子进程没有调用child_stop()函数,打印那两句话呢????子程序已经死掉了吗???
在5秒内按下"ctrl + c"产生中断的结果是:
This is parent process, pid = 一个整数,
This is child process 1 pid = 一个整数,
This is child process 2 pid = 一个整数,
Parent process will be killed, The children will be killed first!
这个结果我知道...
----------------------------------------------------------------------------
现在我把函数parent_stop()中的 "exit(0);" 去掉,
然后也同样的运行时按下"ctrl + c"产生中断,
执行的结果是这样的:
This is parent process, pid = 一个整数,
This is child process 1 pid = 一个整数,
This is child process 2 pid = 一个整数,
Parent process will be killed, The children will be killed first!
Parent process (pid = 一个整数) finished! //比上面的结果多出来的
-----------------------------------------------------------------------------------
打印出来了这句:Parent process (pid = 一个整数) finished!
说明在执行parent_stop后,程序返回,执行下面语句
kill(pid1, SIGUSR1);
kill(pid2, SIGUSR2);
wait(0);
wait(0);
printf("Parent process (pid = %d) finished!n", getpid());
exit(0);
我不明白的是,为什么执行了
kill(pid1, SIGUSR1);
kill(pid2, SIGUSR2);
这两句,给两个子进程发送了SIGUSR1,SIGUSR2信号,
为什么子进程没有调用child_stop()函数,打印那两句话呢????子程序已经死掉了吗???
程序代码:
#include
#include
#include
void parent_stop();
void child_stop();
main() {
int pid1, pid2;
while((pid1 = fork()) == -1);
if(pid1 > 0) {
while((pid2 = fork()) == -1);
if(pid2 > 0) {
printf("This is parent process ,pid = %dn", getpid());
signal(SIGINT, parent_stop); //按"ctrl + c"退出
signal(SIGQUIT, parent_stop); //按"ctrl + "退出
sleep(5);
kill(pid1, SIGUSR1);
kill(pid2, SIGUSR2);
wait(0);
wait(0);
printf("Parent process (pid = %d) finished!n", getpid());
exit(0);
} else {
printf("This is child process 2 pid = %dn", getpid());
signal(SIGUSR2, child_stop);
sleep(6);
}
} else {
printf("This is child process 1 pid = %dn", getpid());
signal(SIGUSR1, child_stop);
sleep(6);
}
}
void parent_stop() {
printf("Parent process will be killed, The children will be killed first! n");
exit(0); //标记处
}
void child_stop() {
printf("Child process (pid = %d) be killed n", getpid());
exit(0);
}
|
试了下, 发现在 Ctrl-c的同时, 子进程被kill掉了
在子子进程代码中加入
signal(SIGINT, parent_stop); // 这个只是图方便哈
就可以避免被杀掉, 最后的结果也是你想要的
在子子进程代码中加入
signal(SIGINT, parent_stop); // 这个只是图方便哈
就可以避免被杀掉, 最后的结果也是你想要的
|
看着代码头晕 友情UP