Linux C中父进程退出时,使用什么方法可使子进

Linux C中父进程退出时,使用什么方法可使子进,第1张

可以用wait( ) 或者 waitpid( ) 阻塞父进程,等待子进程自己退出后给子进程收尸;

或者在子进程中注册一个信号响应,响应动作为退出进程,然后在父进程要退出时,给子进程发送信号,然后等待子进程退出后收尸。

相关API:

wait( )

signal( )

exit( )

父进程退出前,使用 kill 向子进程发送 SIGKILL 信号。1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/wait.h>

int main(void)

{

pid_t pid

pid = fork()

if (pid <0) {

printf("fork error!\n")

exit(-1)

}

if (pid >0) {

printf("Parent. ppid(%d), pid(%d)\n", getppid(), getpid())

kill(pid, SIGKILL)

wait(NULL)

printf("Done\n")

} else {

printf("Child. ppid(%d), pid(%d)\n", getppid(), getpid())

sleep(3)

}

return 0

}

分几种情况:

父进程永不退出:这种情况下若子进程退出,而父进程没有收集子进程的退出状态,则此子进程会变为僵尸进程,一直占用少量资源,有危害;

父进程比子进程先退出:这种情况下父进程退出时,仍在运行的子进程会变为孤儿进程,孤儿进程会被托管给init进程,孤儿进程结束时由init进程负责回收;

父进程比子进程晚退出:子进程先退出时会变为僵尸进程,占用少量资源;待到父进程再退出时,子进程由僵尸进程变为孤儿进程,init进程会回收这些已僵死的孤儿进程,则这些已经僵死的孤儿进程就能瞑目而去了;


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/6245141.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-19
下一篇2023-03-19

发表评论

登录后才能评论

评论列表(0条)

    保存