草庐IT

linux - 如何使用 `pstree` 获取所有父进程和所有子进程

命令pstreePID可以显示PID指定进程的所有子进程信息。但是,我也想知道PID进程的所有父进程信息,如何获取呢?一个例子:init|-parent_process|`-current_process||-subprocess_1|`-subprocess_2`-other_process我想要的是当我运行pstreecurrent_process_pid时,我想要得到以下输出:init`-parent_process`-current_process|-subprocess_1`-subprocess_2当我运行pstreesubprocess_1_pid时,它会输出:init`

linux - Bash:当脚本终止时,如何终止脚本的子进程?

该问题适用于如下脚本:脚本#!/bin/shSRC="/tmp/my-server-logs"echo"STARTINGGREPJOBS..."forfin`find${SRC}-name'*log*2011*'|sort--reverse`do(OUT=`nicegrep-ci-E"${1}""${f}"`if["${OUT}"!="0"]thenprintf'%7s:%s\n'"${OUT}""${f}"elseprintf'%7s%s\n'"(none)""${f}"fi)&doneecho"WAITING..."waitecho"FINISHED!"当前行为在控制台中按Ctrl

linux - fork() 如何为子进程返回

我知道fork()对子进程和父进程的返回方式不同,但我无法找到有关如何发生这种情况的信息。子进程如何接收到fork的返回值0?在调用堆栈方面有什么区别?据我了解,对于parent来说,它是这样的:父进程--调用fork-->system_call--调用fork-->fork执行--返回-->system_call--返回-->父进程。子进程中发生了什么? 最佳答案 %forkRETURNVALUESUponsuccessfulcompletion,fork()returnsavalueof0tothechildprocessand

python - 如何使用 Python 中的子进程模块启动和停止 Linux 程序?

我正在编写一个网络应用程序,它使用Selenium来抓取另一个网站的屏幕。这种屏幕抓取每天只发生一次,所以我不想让Selenium和Xvfb一直运行。我正在尝试弄清楚如何从Python启动Xvfb和Selenium,然后在屏幕抓取完成后停止它们。如果我手动执行,我会在命令行启动它们,然后按CTRLC停止它们。我正在尝试从Python做同样的事情。我好像可以这样成功启动Xvfb:xvfb=Popen('Xvfb:99-nolistentcp',shell=True)但是当我试图终止它时:xvfb.terminate()然后尝试再次启动它(通过重复我的初始命令),它告诉我它已经在运行。

linux - 为什么我必须为子进程设置 `wait()`?

尽管等待linux手册页1很好地解释了您需要wait()来让子进程不变成僵尸,它根本没有说明原因。我计划我的程序(这是我的第一个多线程程序,请原谅我的天真)围绕一个for(;;)ever循环启动子进程,该子进程获取exec()ed并肯定会自行终止。我不能使用wait(NULL)因为这使得并行计算变得不可能,因此我可能必须添加一个存储子pid的进程表并且必须使用waitpid-不是立即,而是在一段时间后-这是一个问题,因为child的运行时间从几微秒到几分钟不等。如果我太早使用waitpid,我的父进程会被阻塞,当我太晚使用它时,我会被僵尸淹没,不能再fork()了,这不是只对我的过程不

linux - 等待子进程但出现错误 : 'pid is not a child of this shell'

我写了一个脚本从HDFS并行获取数据,然后我在一个for循环中等待这些子进程,但有时它返回“pid不是这个shell的子进程”。有时,它工作得很好。它很困惑。我使用“jobs-l”来显示在后台运行的所有作业。我确定这些pid是shell进程的子进程,并且我使用“psaux”来确保这些pid没有分配给其他进程。这是我的脚本。PID=()FILE=()letserial=0whilereadindex_tardoecho$index_tar|grepindex>/dev/null2>&1if[[$?-ne0]]thencontinuefisuffix=`printf'%03d'$seria

c - 跟踪子进程的死亡

如何在不让父进程等待子进程被杀死的情况下追踪子进程的死亡?我正在尝试一个客户端-服务器方案,其中服务器接受来自客户端的连接并为它接受的每个连接创建一个新进程。我忽略了SIGCHLD信号以防止僵尸创建。signal(SIGCHLD,SIG_IGN);while(1){accept();clients++;if(fork()==0){childfunction();clients--;}else{}}上述场景中的问题是,如果子进程在childfunction()函数中被终止,则全局变量clients不会递减。注意:我正在寻找不使用SIGCHLD信号的解决方案......如果可能的话

linux - 我怎样才能启动一个不是原始进程子进程的新进程?

(OSX10.7)我们使用的应用程序允许我们分配脚本,以便在应用程序中发生某些事件时调用。我已经分配了一个bash脚本并且正在调用它,问题是我需要做的是执行一些命令,等待30秒,然后再执行一些命令。如果我让我的bash脚本执行“sleep30”,整个应用程序会在等待我的脚本完成时卡住30秒。我尝试将30秒的等待(和第二组命令)放入一个单独的脚本并调用“./secondScript&”,但应用程序仍然在那里等待30秒什么都不做。我假设应用程序正在等待脚本和所有子进程终止。我已经尝试了从主脚本中调用第二个脚本的这些变体,它们都有相同的问题:nohup./secondScript&((./s

linux - 当父进程被 "kill -9"杀死时,子进程是否也会被杀死?

我的一位同事今天早上告诉我,他杀了supervisord通过“kill-9”,supervisord的子进程没有被杀死。他很确定这一点,但我试了很多次都没有发现这种情况。那么当父进程被“kill-9”杀死时,linux会确保它的子进程也被杀死吗? 最佳答案 不,当父进程被杀死时,子进程不一定被杀死。但是,如果子进程打开了一个正在写入的管道,而父进程正在从中读取,那么当它下次尝试写入管道时,它将收到一个SIGPIPE,默认操作是终止它。这在实践中经常发生。 关于linux-当父进程被"ki

php - 终止从套接字服务器派生的僵尸子进程

DisclaimerIamwellawarethatPHPmightnothavebeenthebestchoiceinthiscaseforasocketserver.Pleaserefrainfromsuggestingdifferentlanguages/platforms-believeme-I'vehearditfromalldirections.在Unix环境中工作并使用PHP5.2.17,我的情况如下-我用PHP构建了一个与flash客户端通信的套接字服务器。我的第一个障碍是每个传入连接都会阻塞顺序连接,直到它完成处理。我通过使用PHP的pcntl_fork()解决了这个