当前位置: 技术问答>linux和unix
Linux下请教一个父进程杀死子进程的问题.
来源: 互联网 发布时间:2017-03-09
本文导语: 父进程通过system函数调用pppd执行拨号,如果检测到网络不通,需要关闭pppd重新执行,我是通过执行system("killall pppd")来实现的,子进程pppd能够被关闭,但是有时候会出现父进程也同时中断退出的情况,不知道为什么...
父进程通过system函数调用pppd执行拨号,如果检测到网络不通,需要关闭pppd重新执行,我是通过执行system("killall pppd")来实现的,子进程pppd能够被关闭,但是有时候会出现父进程也同时中断退出的情况,不知道为什么。
|
system是fork+exec(/bin/bash)执行的command,其实将会存在3个进程,父进程,shell进程,pppd进程,kill pppd将导致shell wait到并退出,导致父进程wait到并退出。 这本来就是串联从底向上执行的, 不存在你说的父进程和pppd同名,父进程叫Main就是main.
|
没怎么用过killall
google了一下,看到这么一段
killall
killall 通过程序的名字,直接杀死所有进程,咱们简单说一下就行了。
用法:killall 正在运行的程序名
killall 也和ps或pgrep 结合使用,比较方便;通过ps或pgrep 来查看哪些程序在运行;
举例:
[root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# killall gaim
是不是因为父子进程同名,然后被killall一起杀死了?
等高手回答。
google了一下,看到这么一段
killall
killall 通过程序的名字,直接杀死所有进程,咱们简单说一下就行了。
用法:killall 正在运行的程序名
killall 也和ps或pgrep 结合使用,比较方便;通过ps或pgrep 来查看哪些程序在运行;
举例:
[root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# killall gaim
是不是因为父子进程同名,然后被killall一起杀死了?
等高手回答。
|
子进程退掉的瞬间父进程就立即wait到子进程并离开system函数继续向下执行了,你代码system之后如果是退出进程的话当然就是看起来像父子一起退掉了。