![`jobs` 命令不显示任何后台进程](https://linux22.com/image/1366726/%60jobs%60%20%E5%91%BD%E4%BB%A4%E4%B8%8D%E6%98%BE%E7%A4%BA%E4%BB%BB%E4%BD%95%E5%90%8E%E5%8F%B0%E8%BF%9B%E7%A8%8B.png)
当我在办公室使用我的台式机时,我run.sh
四次在后台启动了一个脚本。
run.sh parameter1 &
run.sh parameter2 &
run.sh parameter3 &
run.sh parameter4 &
然后我回到家,在笔记本电脑上打开一个终端,通过 ssh 连接到办公室的桌面。运行时ps -u jack
,我看到了启动的进程:
3562 pts/1 00:00:00 bash
4540 pts/2 00:00:00 bash
4643 pts/3 00:00:00 bash
4748 pts/4 00:00:00 bash
但是当我输入 时jobs
,我什么也没得到。为什么我能看到这四个正在运行的后台进程?
顺便问一下,我怎样才能将它们带回我当前的终端,以便我可以杀死其中一个,比如说run.sh parameter4 &
?
答案1
根据问题的问题陈述,恕我直言,我看不出使用background
或的任何理由foreground
。您所关心的只是找到在后台运行的进程,以便可以终止它。
运行以查找进程名称中ps -ef | grep parameter3
包含的进程。您可以调整以唯一地标识一个进程,前提是您没有两个进程具有完全相同的进程名称。parameter3
grep
一旦获得它,只需执行kill -9 PID
此操作,该进程就会被终止。因此无需将该进程带到前台即可终止它。
希望这可以帮助。
答案2
这是因为jobs
显示后台命令从(属于)同一个 shell 启动。在桌面终端和 ssh 终端下运行的 shell 进程是不同的。
看http://www.gnu.org/software/bash/manual/html_node/Job-Control-Basics.html
为了能够从您可以使用的不同终端将您的进程作为作业进行控制screen
,或者tmux
基本上是虚拟终端管理器,并可以将它们重新连接到任意数量的其他终端。
例如,当screen
您刚启动它时,它会打开您的默认 shell,您可以像使用任何其他 shell 一样使用它。然后,当您回到家并通过 ssh 连接到您的办公室机器时,您可以运行以将虚拟终端从您的办公室桌面终端分离并将其连接到您的 ssh 终端,从而恢复工作。您可以通过按 Ctrl-A、dscreen -d -r
从虚拟终端内部分离它。screen