&
在后台的远程计算机上启动了wget。突然,它停止下载。我想终止其过程,然后重新运行命令。如何终止它?我还没有关闭其外壳窗口。但正如您所知,使用Ctrl + C和Ctrl + Z并不会停止。
#1 楼
有许多方法可以解决此问题。方法#1-ps
您可以使用
ps
命令找到该进程的进程ID,然后使用PID来杀死进程。示例
$ ps -eaf | grep [w]get
saml 1713 1709 0 Dec10 pts/0 00:00:00 wget ...
$ kill 1713
方法#2-pgrep
还可以找到进程ID使用
pgrep
。示例
$ pgrep wget
1234
$ kill 1234
方法#3-pkill
如果您确定这是唯一的
wget
您已运行,可以使用命令pkill
按名称杀死该作业。示例
$ pkill wget
方法#4-作业
如果您位于与运行后台程序的位置相同的Shell中。您可以使用
jobs
命令检查它是否仍在运行,并按其作业号将其杀死。示例
我的假作业
sleep
。$ sleep 100 &
[1] 4542
查找工作编号。注意:数字4542是进程ID。
$ jobs
[1]+ Running sleep 100 &
$ kill %1
[1]+ Terminated sleep 100
方法#5-fg
您可以将后台作业带回前台使用
fg
命令。示例
假作业
sleep
。$ sleep 100 &
[1] 4650
获取作业的编号。
$ jobs
[1]+ Running sleep 100 &
将作业#1带回到前台,然后使用Ctrl + C。
$ fg 1
sleep 100
^C
$
#2 楼
在bash中,您可以使用fg
将作业放到前台,然后使用Ctrl + C ,或者使用
jobs
在后台列出进程,然后执行kill %1
(用1替换为
jobs
给您的数字)#3 楼
您也可以使用kill $!
杀死最近后台的作业。评论
如果将其用作bash配置文件中的别名之类的命令,请确保使用单引号引起来。
– Nate Ritter
19-09-27在20:57
#4 楼
编辑:进入前台后,您可以按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.
#5 楼
正确的方法是键入jobs
,然后使用作业号将其杀死。为了使用pid杀死它,您需要按照第一个答案中的说明将其置于前台。请尝试使用此
~/Desktop$ sleep 1000 &
[1] 7056
~/Desktop$ jobs
[1]+ Running sleep 1000 &
/Desktop$ kill %1 #(%1 is the job number)
如果杀死后立即运行作业,您应该会看到此
Desktop$ jobs
[1]+ Terminated sleep 1000
#6 楼
我在这里看不到的一件事是pidof
,尤其是在测试命令时,我发现它非常有用。您可以使用pidof [command]
查找当前正在运行的进程的进程ID。我喜欢它是因为它使我能够快速找到所需命令的ID,通常是我刚刚调用的ID。一旦有了pid,就可以简单地终止进程。它允许创建简单的脚本以仅在进程当前正在运行时才终止该进程。
评论
啊,这对我有帮助!由于某些原因,kill%1无效,“ kill:无法解析参数'%1'”,并且Ctrl + C无效;在ps或其他任何东西中找不到进程,因为它是根目录(我忘了我在其中使用了sudo)
–mjohnsonengr
17 Mar 23 '17 at 15:47
#7 楼
一个常见的示例是stress
工具。假设您运行了以下命令:$ stress -c 4 -m 4
,然后关闭了终端窗口。该过程将继续从后台消耗您的资源。
我的工作:
$ x=`pgrep stress` ; sudo kill -9 $x
pgrep
列出了所处理过程的PID和将其存储到变量x
中,然后kill -9
使用该变量终止它。 #8 楼
在bash上次停止的进程(Ctrl-Z)中,您将被杀死:kill %%
kill -9 %%
,或者如果要选择,请使用: br />
然后:
jobs
像
kill %N
#9 楼
最简单的方法是在-9
命令上使用kill
标志user@host:/path> jobs
[1]+ Running /usr/home/script1.sh $i &
user@host:/path> fg
/usr/home/script1.sh $i
^C
[1]+ Stopped /usr/home/script1.sh $i
user@host:/path> kill -9 %1
[1]+ Stopped /usr/home/script1.sh $i
user@host:/path>
[1]+ Killed /usr/home/script1.sh $i
user@host:/path>
user@host:/path> jobs
user@host:/path>
评论
@MohammadEtemaddar-使用ps输出的第二个数字。第三个#是父级的进程ID。
–slm♦
2013年12月12日上午7:34
@MohammadEtemaddar-啊,ps正在找到grep。这样做:ps -eaef | grep [w]获取。
–slm♦
2013年12月12日上午7:54
@MohammadEtemaddar-您也可以改用pgrep,即pgrep wget。
–slm♦
2013年12月12日上午7:56
@MohammadEtemaddar-对不起,多余的e是一个错字。应该读ps -eaf | grep [w]获取。这些选项位于ps手册页中。男子ps
–slm♦
2013年12月12日上午8:01
kill %%杀死最后一个后台进程。重复它会杀死之前的一个,依此类推。 kill%1杀死第一个后台进程。
–Ronny Sherer
20-2-5在12:06