【发布时间】:2024-05-02 12:30:02
【问题描述】:
假设我启动了一个父进程,它启动了一个子进程,但随后父进程收到了SIGINT。我希望父进程退出,但我不希望子进程徘徊和/或成为僵尸。我需要确保它死掉。
如果我可以确定孩子也收到了SIGINT,那么它可能正在自行清理。在这种情况下,我宁愿在它完成并自行退出时短暂等待。但如果它没有收到SIGINT,那么我会立即给它发送SIGTERM(或SIGKILL),让父进程自己进行清理。
如何确定孩子是否收到了SIGINT? (撇开它甚至可能不响应SIGINT...的事实不谈)我是否只需要猜测,基于父进程是否在前台进程组中运行?如果SIGINT 是以编程方式发送的,而不是通过Ctrl+C 发送呢?
【问题讨论】:
-
SIGINT是如何完成的? Ctrl-C 一般给进程组.... -
不清楚的问题。给minimal reproducible example
-
相关问题(由同一 OP 提出):*.com/q/47224241/841108
-
不,除非说 SIGINT 直接杀死孩子,在这种情况下,父母将获得 SIGCHLD 并且父母将能够通过
waitpid为孩子接收的状态将表明孩子被杀死信号情报。另外,如果父母死了,孩子也不会变成僵尸。如果一个孩子死了并且它的父母没有获得它的状态信息,它就会变成一个僵尸
标签: unix subprocess signals