Articles of 僵尸进程

为什么起源的过程开始作为僵尸在Qt-app。 Linux的

我正在使用qt创build器在linux上编写一个小应用程序。 当我开始我的应用程序,我希望它执行一个shell命令。 我是这样使用QProcess的: int main(int argc, char *argv[]) { MyApplication a(argc, argv); QProcess mapProc(&a); QString command; QStringList args; command = "java"; args << "-jar" << "/home/$USER/MapServer/map.jar" << "localhost" << "9797" << "12123"; mapProc.start(command, args); bool flag = mapProc.waitForStarted(); QProcess::ProcessState state = mapProc.state(); qDebug() << mapProc.errorString(); qDebug() << mapProc.pid(); /*///////////////// some code /////////////////*/ return a.exec(); } […]

init的僵尸小孩

僵尸进程如何成为init的孩子? 所有的孩子都不应该等待吗? 我偶尔遇到僵尸进程的父母是初始化。 该理论认为,当进程死亡时,它一直是僵尸,直到它的父母等待或waitpid的。 如果父母死了,那么init会采用这个过程,然后等待。 我正在看这样的过程。 我用strace附加到init。 我确实看到init在一会儿醒来,waitpid在其subprocess中。 但是我确实看到它跳过了它的僵尸孩子。 我想知道这是如何可能的。 有任何想法吗?

SIGCHLD未交付到进程树中

我试图创build一个进程来pipe理一些其他进程的方式,如果一个孩子死亡,然后父母重新启动进程和依赖于它的进程。 问题是,我注意到,如果我在这个结构的中间重新启动一个进程时创build一个进程的树结构,我无法在新的subprocess终止时发出信号。 我写一个例子, 假设我们有3个过程,祖父母,父母和孩子。 祖父母的叉子,并开始父,叉和开始孩子(我把这个职位的末尾的代码)。 现在,如果我杀了孩子一切正常,孩子正确地重新启动。 如果我杀了父…祖父母重新启动父,重新启动子,但如果我杀了孩子的过程中保持僵尸状态和SIGCHLD不传递给父进程。 换一种说法: 开始祖父母进程,并等待所有3个进程已经启动 杀死父进程,并等待重启subprocess的祖父母重启父进程 现在杀死孩子的过程,这个过程仍然处于僵尸状态。 我无法理解这种行为…我已经阅读了大量有关信号和等待的示例和文档,试图重置默认处理程序,在父母和祖父母之前,但似乎没有工作…这是代码示例… grandparent.cpp #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <signal.h> #include <wait.h> using namespace std; void startProcess(string processFile); void childDieHandler(int sig, siginfo_t *child_info, void *context); FILE *logFile; int currentChildPid; int main(int argc, char** argv) { currentChildPid = 0; logFile = stdout; daemon(1,1); […]

叉100同时进行,有时一些进程变成僵尸

我尝试在下面的代码中同时启动100个进程: int cnt = 0; void sig_handler(int signo) { pid_t pid; int stat; pid = wait(&stat); cout << "cnt:" << ++cnt << ", pid:" << pid << " signal:" << signo << endl; } int main() { signal(SIGCHLD, sig_handler); for (int i = 0; i < 100; ++i) { if (fork() == 0) { sleep(1); […]

什么是信号(SIGCHLD,SIG_DFL); 意思?

我没有在我的代码中处理SIGCHLD。 终止后,我的过程仍然立即被删除。 我希望它成为僵尸进程。 如果我将SIGCHLD设置为SIGDFT,那么它会起作用吗? 我如何将SIGCHLD设置为SIGDFT? 我想要进程成为僵尸,所以我可以在waitpid之后读取父进程中的subprocess。

从shell避免僵尸进程?

我正在写几个shell脚本来做一些事情: main.sh在屏幕下运行,它设置了一些variables,然后在前台调用: start.sh (no&) 它运行start.sh ,它设置一些Java特定的variables,并启动一个Java进程(再次在前台 ) Java运行并执行它的事情,直到收到一个“退出”命令。 (也在前台 所以我的过程树如下所示: – main.sh \ – start.sh \ – java 问题是,Java程序偶尔会处于一种不遵守“退出”命令的时髦状态,坐在那里欢快地做着事情。 我一直把这个Java进程的进程ID保存到一个PID文件中,并向这些java进程发送-STOP(17?)-TERM(15)和KILL(9)信号,但似乎没有把它们正确地closures。 我可以杀死'start.sh'进程,这会阻止进程树,但会将Java进程置于可怕的死亡(zombie)状态,唯一的解决scheme就是重启服务器。 我想知道是否有人对我如何避免进入这些情况有任何意见,或者是否有任何Linux / shellfunction缺失,可能会阻止这些僵尸进程的发生。 我还应该添加我不能修改Java应用程序代码,因为它是一个专有的应用程序,我没有可用的源代码。 在Fedora 14上运行2.6.35.13-92.fc14.x86_64内核。 提前致谢,

如何通过shell脚本杀死linux的死掉进程

在我的服务器机器上,一些进程每天都会停止运行。 它会影响我的CPU使用率。 需要编写一个shell脚本来杀死已失效的进程ID和父ID。 例如,当我运行命令: ps -ef|grep defunct. 发现可能值。 在这个我只需要杀死“[chrome]已经失效”的过程。 样本条目: – bitnami 12217 12111 0 Feb09 pts/3 00:00:00 [chrome] <defunct> 我需要杀死这种types的chrome条目。 任何人都可以build议一些样品来杀死这些条目

强制父母收获一个subprocess<defunct>

我一直在拼命地从父母那里杀了一个孩子的过程。 我已经试过了:1.杀-15 pid 杀-shotgun pid 杀-9 pid 他们都解决了把subprocess写成:“defunct”(zombie)ps -A在linux下。 如何杀死进程并强制从进程表中清除进程。 我必须清理它,因为在进程表中缺lesslogging是我如何在代码中validation进程已经死亡。 谢谢 :-)

杀死一个Java僵尸进程

我正在运行一个实验性的Java应用程序,每当我杀死或停止应用程序,僵尸进程得到创build。 我知道僵尸并不是真正的问题,因为他们(据说)不会消耗资源。 但是,我的RAM空闲空间明显小于它应该是。 这是转储的 ps aux | grep java 3052 8.5 0.0 0 0 ? Zl Sep24 127:24 [java] <defunct> 6644 0.9 0.0 0 0 ? Zl Sep24 13:20 [java] <defunct> 8325 0.7 0.0 0 0 ? Zl Sep24 11:01 [java] <defunct> 8954 0.7 0.0 0 0 ? Zl Sep24 11:01 [java] <defunct> 16229 1.3 […]

如何杀死僵尸进程使用wait()

我有这个代码,需要父母分叉3个孩子。 你怎么知道(和)在哪里把“wait()”语句杀死 僵尸进程? 如果你有Linux虚拟盒子,查看僵尸进程的命令是什么? main(){ pid_t child; printf("———————————–\n"); about("Parent"); printf("Now .. Forking !!\n"); child = fork(); int i=0; for (i=0; i<3; i++){ if (child < 0) { perror ("Unable to fork"); break; } else if (child == 0){ printf ("creating child #%d\n", (i+1)); about ("Child"); break; } else{ child = fork(); } } } void […]