我已经使用后台在远程计算机上启动了wget &
。突然,它停止下载。我想终止其过程,然后重新运行命令。我该如何终止?
我尚未关闭其外壳窗口。但正如您所知,它不会停止使用Ctrl+ C和Ctrl+ Z。
我已经使用后台在远程计算机上启动了wget &
。突然,它停止下载。我想终止其过程,然后重新运行命令。我该如何终止?
我尚未关闭其外壳窗口。但正如您所知,它不会停止使用Ctrl+ C和Ctrl+ Z。
Answers:
有很多方法可以解决此问题。
您可以使用该ps
命令找到该进程的进程ID,然后使用PID终止该进程。
$ ps -eaf | grep [w]get
saml 1713 1709 0 Dec10 pts/0 00:00:00 wget ...
$ kill 1713
您也可以使用查找进程ID pgrep
。
$ pgrep wget
1234
$ kill 1234
如果确定只有它wget
运行过,则可以使用该命令pkill
按名称杀死该作业。
$ pkill wget
如果您与运行后台作业的外壳位于同一外壳中。您可以使用jobs
命令检查它是否仍在运行,也可以通过其作业号将其杀死。
我的假工作sleep
。
$ sleep 100 &
[1] 4542
找到它的工作编号。注意:数字4542是进程ID。
$ jobs
[1]+ Running sleep 100 &
$ kill %1
[1]+ Terminated sleep 100
您可以使用以下fg
命令将后台作业重新带到前台。
伪造的工作sleep
。
$ sleep 100 &
[1] 4650
获取工作编号。
$ jobs
[1]+ Running sleep 100 &
将作业#1重新放到前台,然后使用Ctrl+ C。
$ fg 1
sleep 100
^C
$
ps
。第三个#是父级的进程ID。
ps -eaef| grep [w]get
。
pgrep
来代替,pgrep wget
。
ps -eaf | grep [w]get
。这些选项在ps
手册页中。man ps
。
编辑:进入前台后,您可以Ctrl+ C,或者如@Zelda所述,用'%x'杀死,其中'x'是作业号将发送默认信号(对于Linux,最可能是SIGTERM)。
fg
如果它是您后台的最后一个进程(带有“&”),只需键入以将其置于前台。
如果不是最后一个,请键入:jobs
并找到以[[]]表示的'职位编号'。然后只需输入:
fg 2
..其中“ 2”是工作编号,例如:
foo@bar:~/junk/books$ jobs
[1]+ Running okular how_to_cook_a_turkey.pdf &
foo@bar:~/junk/books$ fg 1
okular how_to_cook_a_turkey.pdf <- this is now in the foreground.
我在这里看不到的一件事是,尤其是在测试命令时,我发现它非常有用pidof
。您可以pidof [command]
用来查找当前正在运行的进程的进程ID。我喜欢它,因为它可以让我快速找到所需命令的ID,通常是我刚刚调用的ID。
一旦有了pid,您就可以简单地终止该进程。它允许创建简单的脚本以仅在进程当前正在运行时才杀死该进程。
一个常见的例子是stress
工具。假设您执行了以下操作:
$ stress -c 4 -m 4
并关闭终端窗口。该过程将继续从后台消耗您的资源。
她是我的工作:
$ x=`pgrep stress` ; sudo kill -9 $x
pgrep
列出受处理进程的PID,并将其存储到变量中x
,然后由变量用于kill -9
终止它。
jobs
没有output
和fg
赛斯:-bash: fg: 1: no such job
。但是键入fg
效果很好,效果也pkill wget
很好。但是ps -eaf|grep wget
然后并kill <process number>
没有停止工作。ps:我将第三个数字用作进程号。