|
1
197
孩子可以要求内核交付
|
|
|
2
71
我正试图解决同样的问题,因为我的程序必须在OSX上运行,所以Linux唯一的解决方案对我不起作用。 我得出了与本页其他人相同的结论——当父母去世时,没有一种POSIX兼容的方式通知孩子。所以我胡乱想了下一件最好的事情——让孩子投票。 当父进程因任何原因死亡时,子进程的父进程变为进程1。如果子级只是定期轮询,它可以检查其父级是否为1。如果是,则孩子应该退出。 这不是很好,但它可以工作,而且比本页其他地方建议的TCP套接字/锁文件轮询解决方案更简单。 |
|
|
3
33
我在过去通过在“child”中运行“original”代码和在“parent”中运行“spoked”代码实现了这一点(也就是说:您在测试之后反转了通常意义上的测试)
|
|
|
4
30
这将在启用作业控制的shell进程中运行子进程。子进程是在后台生成的。shell等待换行符(或EOF),然后杀死子进程。 当父对象死亡时——不管是什么原因——它将关闭其管道末端。子shell将从读取中获取EOF,并继续终止后台子进程。 |
|
|
5
26
在Linux下,您可以在子系统中安装父系统死亡信号,例如:
请注意,在fork之前存储父进程id,并在fork之后在子进程中测试它
如果我们确信负责采用所有测试的系统流程 orphans 具有PID 1:
传统上,采用所有孤立项的系统进程是PID 1,即init,它是所有进程的祖先。
论现代制度
Linux
或
FreeBSD
另一个进程可能具有这种作用。例如,在Linux上,进程可以调用
|
|
|
6
15
为了完整起见。在macOS上,您可以使用kqueue:
|
|
|
7
11
子进程与父进程之间是否有管道?如果是这样,您将在写入时收到SIGPIPE,或者在读取时收到EOF-这些情况都可以检测到。 |
|
|
8
11
受这里另一个答案的启发,我提出了以下所有POSIX解决方案。一般的想法是在父代和子代之间创建一个中间过程,其目的只有一个:注意父代何时死亡,并明确杀死子代。 当无法修改子级中的代码时,这种类型的解决方案非常有用。
另外,我使用的实际代码是Python。以下是完整性:
|
|
|
9
8
我认为不可能保证只使用标准POSIX调用。就像现实生活一样,孩子一旦出生,就有了自己的生活。 信息技术 是 父进程可能捕获大多数可能的终止事件,并尝试在该点终止子进程,但总有一些无法捕获。
例如,任何进程都无法捕获
延伸这个类比——唯一的其他标准方式是,当孩子发现自己不再有父母时自杀。
|
|
|
10
6
正如其他人指出的,当父pid退出时,依赖父pid变为1是不可移植的。不要等待特定的父进程ID,只需等待ID更改即可:
如果您不想全速轮询,请根据需要添加微睡眠。
|
|
|
11
6
这个解决方案对我有效:
这是针对工作进程类型的,其存在仅在父进程处于活动状态时才有意义。 |
|
|
12
5
安装 陷阱处理程序 打开具有独占访问权限的.lock文件,并让子进程对其进行轮询以尝试打开它-如果打开成功,子进程应退出 |
|
|
13
5
一些海报已经提到了管道和管道
假设您有两个套接字文件描述符fd1、fd2。现在
您可以尝试编译上述概念验证代码,并在类似
与使用的方法进行了比较
对称的 ,即进程可以使用相同的通道来监视彼此的存在。 此解决方案仅调用POSIX函数。我在Linux和FreeBSD中尝试了这个。我认为它应该适用于其他Unix,但我还没有真正测试过。
|
|
|
14
3
|
|
|
15
2
另一种特定于Linux的方法是在新的PID命名空间中创建父级。然后在该名称空间中它将是PID 1,当它退出时,它的所有子项都将立即被
不幸的是,为了创建一个新的PID名称空间,您必须
|
|
16
1
在下面
POSIX
这个
请注意,您可能需要阅读大量的细节,包括基本定义(Definitions)部分,以及系统服务信息
|
|
|
17
1
如果您向pid 0发送信号,例如使用
您可以通过以下方式轻松测试:
如果然后按^D,您将看到文本
|
|
|
18
1
在与其他人相关的情况下,当我从C++中生成分叉子进程中的JVM实例时,只有在父进程完成之后,才能使JVM实例正确终止的唯一方法是执行以下操作。如果这不是最好的方式,希望有人能在评论中提供反馈。
1) 召唤
2) 向Java应用程序添加一个shutdownhook,该应用程序将轮询直到其父PID等于1,然后执行一个硬操作
这似乎不是一个可靠的解决方案。我仍在努力理解正在发生的事情的细微差别,但有时在screen/SSH会话中运行这些应用程序时,我仍然会遇到孤立的JVM进程。
我没有在Java应用程序中轮询PPID,而是让shutdown钩子执行清理,然后像上面那样执行硬停止。然后我确保调用
|
|
|
19
0
我找到了两个解决方案,都不完美。
1.收到SIGTERM信号时,通过Kill(-pid)杀死所有子级。
通过同样的方法,若您在某处调用process.exit,就可以像上面一样安装“exit”处理程序。
2.使用
chjj/pty.js
在连接了控制终端的情况下生成进程。
|
|
|
20
0
尽管7年过去了,但我在运行SpringBoot应用程序时遇到了这个问题,该应用程序需要在开发过程中启动webpack dev server,并且需要在后端进程停止时终止它。
我试着用
我已将其更改为使用一个专用线程,该线程等待进程退出或退出
|
|
21
0
历史上,从UNIX v7开始,进程系统通过检查进程的父id来检测进程的孤立性
这种方法产生了两个可能导致问题的问题:
|
|
|
22
0
我已经将使用环境的父pid传递给了孩子, 然后定期检查子级是否存在/proc/$ppid。 |
|
|
23
0
诀窍是:
这样:
|
|
|
24
0
如果父母去世,孤儿的PPID变为1-您只需检查自己的PPID。 在某种程度上,这就是上面提到的轮询。 这是一个贝壳片:
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
|
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 1 年前 |
|
|
Marco · PyCharm Linux系统文件上os.stat异常 1 年前 |