如题,我的父进程只负责进程管理,是否跑完数据的逻辑在子进程………
今天晚上刚刚部署在服务器,一千多万条的数据,光想数据完整和效率了,都从家里出来了才想起来没写终止………还有一个小时就跑完了😂😂😂😂😂
##已经测试成功!!!
如果仅仅是fork的进程没有做任何处理的话,不管你用什么方法发送kill SIGTERM都是会导致子进程被init收养吧....
我也测试了(顺便测试了脚本别的地方,发现了一个bug,然后改到现在,呵呵呵呵呵,妈蛋),fork之后子进程kill父进程,但是我前面有说我会在父进程处理信号量,所以我很成功的kill掉了整个进程树
如果父进程定义了处理SIGTERM信号量的函数,而这个处理函数能够很好的kill掉子进程,并在子进程都已经确实被kill之后在自我了断.那么用子进程发送给父进程SIGTERM信号量的方法就是可行的
有人说,貌似我的问题可以用返回值搞定 0.0 是哈 但是我最终还是用了我上述的方法,毕竟正好测试嘛....
1
Jaylee 2016-05-01 21:30:58 +08:00 1
这不成了孤儿进程了?
|
2
EPr2hh6LADQWqRVH 2016-05-01 21:38:48 +08:00 5
你个逆子
|
3
louirobert 2016-05-01 21:39:12 +08:00 1
听上去很奇怪啊:你让 parent 等 child 结束后自己结束不就行了?
|
4
hrong 2016-05-01 22:14:31 +08:00 1
楼主自己都已经说了,父进程只负责进程管理,子进程跑逻辑。。。
如果可以杀了老子的话,结果应该父进程被杀,子进程会被 0 号(还是 1 号?)进程接管,变成俗称的僵尸进程。但是子进程的内容应该还是在跑的,直到其运行结束。 |
5
yangyaofei OP |
6
yangyaofei OP @louirobert parent 负责监视所有子进程,有坏掉停止的就会被重启,如果是你说的那样,就会无限重启了,因为父进程不知道子进程已经跑完任务了………
|
7
just4test 2016-05-01 23:02:55 +08:00 1
@yangyaofei 正常退出和崩掉有区别的吧。
检查返回值就行了。 |
8
yangyaofei OP @just4test 哦,对哈,谢谢谢谢
|
9
littlewing 2016-05-02 00:20:06 +08:00 1
刚写了个测试程序, fork 之后父进程 sleep ,子进程发送 SIGTERM ,父进程就会被杀掉
而且子进程的 parent pid 变成了 1 |
10
littlewing 2016-05-02 00:21:24 +08:00
|
11
yangyaofei OP @littlewing 啊~僵尸和孤儿差不多了.如果仅仅是 fork 的进程没有做任何处理的话,不管你用什么方法发送 kill SIGTERM 都是会导致子进程被 init 收养吧....
我也测试了(顺便测试了脚本别的地方,发现了一个 bug,然后改到现在,呵呵呵呵呵,妈蛋),fork 之后子进程 kill 父进程,但是我前面有说我会在父进程处理信号量,所以我很成功的 kill 掉了整个进程树 也就是说,对于父进程(本来就是为了子进程管理来写的)定义了处理 SIGTERM 信号量的函数,说白了就是会在 kill 他的时候他会先 kill 掉所有子进程,并在子进程都已经确实被 kill 之后在自我了断.当然我的子进程也会捕捉信号量好保存处理的进度.这样就基本没问题了.我问问题的原因是我不知道子进程发送给父进程信号量有没有这个权限,发现可以就肯定可以了的说. 吐槽一句多进程,那乱序真难捕捉.....在自己电脑上测试没问题(3 处理进程),到了服务器上(7 处理进程)瞬间真的乱了.... |
12
msg7086 2016-05-02 03:32:43 +08:00
僵尸怎么会和孤儿差不多?
孤儿院 -> 僵尸院(? |
13
dndx 2016-05-02 03:47:08 +08:00
@Jaylee Zombie processes should not be confused with orphan processes: an orphan process is a process that is still executing, but whose parent has died. These do not remain as zombie processes; instead, (like all orphaned processes) they are adopted by init (process ID 1), which waits on its children. The result is that a process that is both a zombie and an orphan will be reaped automatically.
Source: https://en.wikipedia.org/wiki/Zombie_process |
14
ryd994 2016-05-02 05:02:00 +08:00
讲真……这个还是 ipc (比如 pipe )一下比较好吧……
|
15
yangyaofei OP |
16
xuboying 2016-05-02 11:18:21 +08:00 via Android
@yangyaofei kill 爹地之后自己退出就行了,干嘛要自己处理信号?因为你还想 kill 兄弟?
|
17
yangyaofei OP @xuboying 对啊,不仅如此,我的父进程会监视所有子进程,有关闭的就开启,直接自己关闭会出问题
|