免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2036 | 回复: 9
打印 上一主题 下一主题

这样能杀死parent吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-18 01:19 |只看该作者 |倒序浏览
这样能杀死parent吗?

  1. $ more parentkill.c
  2. /* Example 5.4 */
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <signal.h>

  6. void main(void)
  7. {
  8.    if (kill(getppid(), SIGTERM) == -1)
  9.       perror ("Error in kill");
  10. }
  11. $   
复制代码

这是一本书上的例子,运行以后正常结束没有什么反应。
难道不应该把当前的shell杀掉(退出)吗?
谢谢!

论坛徽章:
0
2 [报告]
发表于 2006-10-18 08:41 |只看该作者
SIGTERM的信号处理函数是可以被捕获 阻塞 忽略的。有可能并不是结束进程。

论坛徽章:
0
3 [报告]
发表于 2006-10-18 10:31 |只看该作者
子进程是可以杀死父进程的。

  1. #include <stdio.h>
  2. #include <signal.h>

  3. int main()
  4. {
  5.         int pid;

  6.         pid=fork();
  7.         if(pid<0)
  8.                 return -1;
  9.         if(pid==0)
  10.         {
  11.                 printf("child pid=%d\n",getpid());
  12.                 sleep(1);
  13.                 kill(getppid(),9);
  14.                 printf("child kill parent\n");
  15.                 return 1;
  16.         }
  17.         else
  18.         {
  19.                 while(1)
  20.                 {
  21.                         printf("parent pid=%d\n",getpid());
  22.                         sleep(1);
  23.                 }
  24.         }
  25. }
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2006-10-18 10:32 |只看该作者
原帖由 catbert 于 2006-10-18 01:19 发表
这样能杀死parent吗?
[code]
$ more parentkill.c
/* Example 5.4 */
#include <stdio.h>
#include <unistd.h>
#include <signal.h>

void main(void)
{
   if (kill(getppid(), SI ...

你把 SIGTERM 改成 SIGKILL 试试。

论坛徽章:
0
5 [报告]
发表于 2006-10-18 10:40 |只看该作者
采用SIGTERM 也是可以杀死父进程的。前提是对信号不做特别处理,按缺省的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2006-10-18 11:16 |只看该作者
原帖由 ccjjhua 于 2006-10-18 10:40 发表
采用SIGTERM 也是可以杀死父进程的。前提是对信号不做特别处理,按缺省的。

你说的很对。

不过,楼主纳闷的是:
这是一本书上的例子,运行以后正常结束没有什么反应
难道不应该把当前的shell杀掉(退出)吗?


Shell 肯定是对 SIGTERM 做过处理的。

论坛徽章:
0
7 [报告]
发表于 2006-10-18 11:57 |只看该作者
原帖由 flw 于 2006-10-18 11:16 发表

你说的很对。

不过,楼主纳闷的是:


Shell 肯定是对 SIGTERM 做过处理的。


我咋就没有想到呢,呵呵。
Ctrl-\就是没有反应。

论坛徽章:
0
8 [报告]
发表于 2006-10-18 12:13 |只看该作者
我没认真理解楼主的意思。用SIGKILL,就是9号信号可以杀掉SHELL ,我试过了,可以。flw的预测得到了验证。

  1. #include <signal.h>
  2. main()
  3. {

  4.         printf("ppid=%d\n",getppid());
  5. kill(getppid(),9);
  6. }
复制代码

[oracle@abtsvr test]$ ./a.out
ppid=5184

Red Hat Linux release 9 (Shrike)
Kernel 2.4.20-8 on an i686
login:

[ 本帖最后由 ccjjhua 于 2006-10-18 12:15 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-10-18 14:33 |只看该作者
原帖由 ccjjhua 于 2006-10-18 12:13 发表
我没认真理解楼主的意思。用SIGKILL,就是9号信号可以杀掉SHELL ,我试过了,可以。flw的预测得到了验证。
[code]
#include <signal.h>
main()
{

        printf("ppid=%d\n",getppid());
...


这事情不要去试验,是必然事件。
因为shell肯定是你那个简单的a.out的父进程,而且它也不能处理SIGKILL信号。

论坛徽章:
0
10 [报告]
发表于 2006-10-18 14:51 |只看该作者
哈哈,楼上说的对。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP