当我尝试关闭Gnome Terminal中的选项卡时,它说:
关闭此终端?该终端中仍在运行一个进程。关闭终端会杀死它。
我如何找出仍在运行的内容?请注意,的输出中没有任何内容jobs
。谢谢。
exit
,gnome终端选项卡不会关闭。
exit
可能会关闭它。@egmont您可以将其移至答案吗?
当我尝试关闭Gnome Terminal中的选项卡时,它说:
关闭此终端?该终端中仍在运行一个进程。关闭终端会杀死它。
我如何找出仍在运行的内容?请注意,的输出中没有任何内容jobs
。谢谢。
exit
,gnome终端选项卡不会关闭。
exit
可能会关闭它。@egmont您可以将其移至答案吗?
Answers:
ps T
选择与终端关联的所有进程。
nohup
命令生成的进程与终端断开连接,因此请勿阻止其关闭。但是它们仍在此命令中列出。
您可以在将Shell的PID列为父进程的进程中发挥最大作用。如您所知,我们可以指定ps
格式
SHELLPID=$$ ; ps -e -o cmd,pid,ppid | awk -v shell=$SHELLPID '$NF~shell'
在这里,我们从特殊变量中获取外壳的PID $$
到中SHELLPID
,然后awk可以在管道的子外壳中使用它。本质上,我们只是以NAME,PID,Parent PID形式列出进程,并仅在最后一列中过滤出具有适当PID的进程。
如果您在终端(例如gedit)中启动了某个进程,则这两个进程的(bash的)进程ID(PID)和(gedit的)父进程ID(PPID)将是相同的。这可以在输出中看到
ps -ef
命令。为了使其更具可读性,首先让输出“管道” grep
以查找当前正在运行的所有“ bash”进程的PID,然后再将其“管道”至awk
。在awk
仅选择PID和进程名的字段(字段2和8),并将其输出到屏幕上。
ps -ef | grep bash | awk '{print $2 ": " $8}'
输出中的数字为PID。您将使用它来查找具有该PID的终端中启动的进程。请注意,如果您打开了多个端子,则可能会有多于一行的输出。现在,找到该终端会话的“子”进程(如果有),我们可以使用以下命令:
ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'
您必须在最后一条命令中输入PID编号代替EnterPID。如果“ bash”有多个PID,则必须全部尝试。
最后一条命令只是查找输出,ps -ef
并搜索PID(从上一条命令中找到的)和PPID是否与任何进程相同。
更多信息:
screen
,tmux
,script
,ssh
,mc
,打开了面板关闭,或只是一个由例如打字壳bash
,或沿着这些路线的东西。按Ctrl + D或键入exit
退出外壳程序,您将看到最终的位置。