相关疑难解决方法(0)

父母退出后如何使子进程死亡?

假设我有一个只产生一个子进程的进程.现在,当父进程因任何原因(正常或异常,通过kill,^ C,断言失败或其他任何原因)退出时,我希望子进程死掉.如何正确地做到这一点?


stackoverflow上的一些类似问题:


关于Windows的 stackoverflow的一些类似问题:

c unix linux fork process

199
推荐指数
13
解决办法
15万
查看次数

如何让父进程退出子进程?

我正在使用ProcessBuilder启动子进程,并且如果父进程执行,则需要子进程退出.在正常情况下,我的代码正在正确地阻止孩子.但是,如果我导致操作系统杀死父级,则子级将继续运行.

有没有办法将子进程"绑定"到父进程,这样当父进程被杀时它会退出?


类似的问题:

java process

46
推荐指数
5
解决办法
5万
查看次数

当一个线程forks()时,其他线程会发生什么?

在使用pthreads的C++中,如果你的一个线程调用fork,你的其他线程会发生什么?

似乎线程不遵循.在我的情况下,我正在尝试创建一个守护进程,我使用fork()与父进程deamonize它.但是,在通过代码的新路径中,我在fork之前创建了一些线程,之后又创建了一些线程.是否有一种简单的方法可以将线程的所有权更改为新的分叉进程,而不是在fork之后移动我的所有线程创建?

c++ multithreading fork pthreads

19
推荐指数
3
解决办法
8960
查看次数

当主脚本被杀死时,如何杀死Perl'系统'调用?

这些问题的过去答案都集中在分叉上:

对于这个问题,我只是询问对'系统'功能的调用.

假设我有一个名为sleep.pl的脚本:

use strict;
use warnings;
sleep(300);
Run Code Online (Sandbox Code Playgroud)

然后我有一个名为kill.pl的脚本

use strict;
use warnings;
system("sleep.pl");
Run Code Online (Sandbox Code Playgroud)

我运行kill.pl并使用ps我找到kill.pl的进程ID并杀死它(不使用kill -9,只是普通的kill)

sleep.pl还在睡觉.

我想我的问题的解决方案涉及一个SIG处理程序,但是我需要将什么内容放入处理程序来杀死子进程?

perl kill

6
推荐指数
1
解决办法
7115
查看次数

Process.waitFor()是否使进程依赖于java父级?

通常,如果我通过以下方式创建进程:

Process proc = new ProcessBuilder("some_long_running_script.py").start();
Run Code Online (Sandbox Code Playgroud)

然后我的java程序完成,我可以看到脚本进程继续运行(如预期的那样)

但是,如果我然后添加代码:

proc.waitFor();
Run Code Online (Sandbox Code Playgroud)

然后在脚本完成之前杀死我的java程序,我可以看到脚本也死了(不像预期的那样).

这似乎是说"waitFor()"以某种方式将脚本进程与我的java进程合并,这是设计的吗?我似乎无法在文档中的任何地方看到它.

这可能是特定于操作系统吗 我在Mac Yosemite上运行

java

5
推荐指数
0
解决办法
146
查看次数

fork()中的父ID和提前终止

我正在练习使用并行编程fork().我希望每个进程的父ID都是前进程的id,但在我的输出中显示相同的id.为什么?第二个问题是关于终止.有时输出显示所有进程,有时只有两个或三个,有时只有一个.为什么?我知道父母的过程应该等待它的孩子,但如果不是在我的问题中.我的困惑是,在fork()调用时,两个进程都是在不知道命令的情况下执行的,不是吗?也许父进程终止自己的执行.但它的孩子可以继续跑步到其余的节目或终止或其他什么?(因为它可以在输出上看到并不总是终止,也不总是完全正确)我不理解输出只显示一个但有时两个或三个或不是全部.我希望我能解释一下我的问题.看来,我做不到.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main (int argc, char *argv[]) {
   pid_t childpid = 0;
   int i;

   for (i = 0; i < 3; i++)
      if (childpid = fork())
         break;

   fprintf(stderr, "i:%d  process ID:%ld  parent ID:%ld  child ID:%ld\n",
           i, (long)getpid(), (long)getppid(), (long)childpid);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(S):

i:0  process ID:2783  parent ID:1954  child ID:2784
i:1  process ID:2784  parent ID:1  child ID:2785
i:2  process ID:2785  parent ID:1  child ID:2786 …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing posix fork

2
推荐指数
1
解决办法
314
查看次数

标签 统计

fork ×3

c ×2

java ×2

process ×2

c++ ×1

kill ×1

linux ×1

multithreading ×1

parallel-processing ×1

perl ×1

posix ×1

pthreads ×1

unix ×1