问题标签 [zombie-process]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
687 浏览

c - 发送 ptrace 信号后获取僵尸进程

我正在测试 ptrace 和信号。

问题是,当我使用 sigaction 转发信号,然后将中断信号发送到进程时kill(pid, SIGKILL)ptrace(PTRACE_SYSCALL, pid, NULL, tracee_signal)进程在ps aux.

只有当我退出“主”进程时,僵尸进程才会通过等待(在“主”进程结束时)收集其返回状态,因此它不再是僵尸。

当我收到信号时,将调用信号处理程序,并将信号的值分配给声明为volatile sig_atomic_t gotsig(Rockkind) 的全局变量。

因此,在跟踪器的主循环中,我检查该全局变量的值>0,然后检查 I kill(pid, gotsig);

之后有这个ptrace(PTRACE_SYSCALL, pid, NULL, tracee_signal)

然后这个过程就变成了僵尸。

为什么会这样?这是正确的行为吗?

补充:
可能是因为我们必须在最近的 ptrace 调用之后显式等待孩子吗?从而获得退出地位?

0 投票
1 回答
427 浏览

c - 当父亲在等待信号时避免僵尸

这是一个奇怪的问题。我有 2 个不同的程序:服务器和客户端。

服务器启动,分配所有消息队列并开始等待来自客户端的信号(该信号用于告诉服务器“有新消息”)。服务器保持无限循环,直到收到 SIGQUIT。客户端在转换时开始向服务器发送大量消息

问题是,这样父亲留下了这么多丧尸。如果我添加

存在主进程fork,然后等到子进程结束,然后再fork的问题。我需要父亲分叉很多次,并且不要等到进程结束再分叉。

但是没有waitpid,问题是另一个问题。因为在那之后他开始接收所有消息所需的所有进程,父亲控制并仍然等待来自客户端的另一个信号(第一个 wait(sem,1) ),留下这么多僵尸进程。

我不知道我解释得好不好..英语很难-_-

所以,我想要一个服务器,接收到信号,分叉很多次。任何孩子接受信息并做一些事情,然后孩子结束。同时服务器继续等待新的传入消息。所有没有制造僵尸:)

0 投票
1 回答
1981 浏览

c++ - Preventing zombie processes in a self-implemented linux shell (C++)

I am self-implementing a linux shell. I am just about done but I need to sort out an issue with zombie processes. In this program, by adding "&" to a command, you can specify that the command to be run should be run in the background.

For example, sleep 30 & will execute the sleep function for 30 seconds but immediately allow the user to enter another command without waiting.

My problem is that in my current implementation, the background process starts but I don't know how to have it inform the program when it has finished execution.

I need to know when it has finished execution because I have a built-in function called "jobs". This function will print out the list of programs currently running.

Ideally, if I execute "sleep 30 &" and then immediately run "jobs" before sleep has finished, it should show something like this:

[1] [PROCESS ID HERE] sleep 30 &

However, if 30 seconds have elapsed and sleep has finished execution, I want it to show that no processes are running. Right now, if I run "sleep 30 &", it shows up as a zombie process ( in the ps -e command). I don't want this. How do I fix this?

Here is my code:

0 投票
1 回答
1931 浏览

linux - 检测 pid 在 Linux 上是否为僵尸

我们可以通过shell命令行检测一些是否是僵尸进程

为了在我们使用的 C/C++ 程序中获取该信息popen(),但我们想避免使用popen(). 有没有办法在不产生额外进程的情况下获得相同的结果?

我们使用的是 Linux 2.6.32-279.5.2.el6.x86_64。

0 投票
3 回答
3480 浏览

linux - 为什么需要僵尸进程?

维基百科基本上提供了我需要知道的有关僵尸进程的所有可能信息,但只是简单地说明了它的用途。如果父进程创建另一个子进程,PID 冲突将不会存在。

那么这实际上如何“有用”?如果要删除命名的僵尸进程而不是保留在那里,那么PID是否不可用?

或者还有其他原因说明为什么应该存在僵尸进程?

0 投票
1 回答
64 浏览

zombie-process - 如果 WPF 中有 5000 个 ContentControl 被创建,应用程序就会变成僵尸进程

如果每次单击按钮时 WPF 中都会重新创建 5000 个 ContentControl,则应用程序将变成僵尸进程。

ContentControl 由 DataTemplate 创建。内存使用率不断上升。

0 投票
1 回答
553 浏览

c - 试图杀死一个产生的进程以一个已失效的进程结束

场景: 我正在开发一个守护程序监控应用程序,它根据请求(TCP-IP)启动和停止守护程序。为了实现这一点,在分叉之后,我打电话setsid()是为了将新进程与父进程(监控进程)“分离”。

当我试图杀死监控应用程序创建的进程之一时,它最终会失效。

这是我的代码:

据我了解,已失效/僵尸进程意味着父母尚未加入该进程。不setsid()解决?

0 投票
3 回答
873 浏览

perl - Parallel::ForkManager 从最后一个子进程中留下一个僵尸进程

我已经找到了上一个问题的解决方案,但还有另一个问题。

但是为此,我还没有找到任何解决方法。

编码:

当我在这个脚本上执行 wgets 时,一切正常,我在进程列表中看到了子进程,但最后一个(总是最后一个)有问题

最后一个子进程始终保持僵尸状态。当我再做一个 wget 时,这个僵尸进程正常退出,另一个(来自这个当前 wget 查询的这个)变成一个僵尸

你知道,最后一个子进程总是僵尸。不知道为什么所有进程都工作正常,但最后一个不是。

任何提示,解决方案?

谢谢你。

// 对不起我的英语不好


这是示例代码。127:8080 上的一个 wget 使子进程成为僵尸。但是脚本正在运行,新查询/新僵尸 PID。

0 投票
1 回答
1313 浏览

unix - 僵尸进程,SIGCHLD,在 unix 中退出

子进程的每个退出(退出或退出)是否都向其父进程发送 SIGCHLD?如果是,那么如何创建僵尸进程?因为等待系统调用通常在 SIGCHLD 处理程序中调用。

0 投票
8 回答
505803 浏览

linux - 如何杀死僵尸进程

我在前台启动了我的程序(一个守护程序),然后我用 杀死了它kill -9,但是我得到了一个僵尸,我无法用 杀死它kill -9。如何杀死僵尸进程?

如果僵尸是一个死进程(已经被杀死),我如何从输出中删除它ps aux