it-swarm.cn

如何终止后台进程?

我已经使用&在后台的远程计算机上启动了wget。突然,它停止下载。我想终止其过程,然后重新运行命令。如何终止?

我尚未关闭其Shell窗口。但是如您所知,它不会停止使用 Ctrl+C 和 Ctrl+Z

213
Mohammad Etemaddar

有很多方法可以解决此问题。

方法#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

您也可以使用pgrep查找进程ID。

$ pgrep wget
1234

$ kill 1234

方法#3-杀死

如果您确定它是唯一运行的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
$
274
slm

在bash中,您可以使用fg将作业移到前台,然后使用 Ctrl+C

或使用jobs在后台列出进程,然后执行

kill %1

(用数字jobs代替了1)

77
Zelda

您也可以使用kill $!杀死最近有背景的工作。

14
tek0078

编辑:一旦在前台,您可以 Ctrl+C,或就像@Zelda提到的,用'%x'杀死,其中'x'是作业编号将发送默认信号(对于Linux,最可能是SIGTERM)。

只需输入fg将其带到前台(如果这是您最后一个后台处理(带有'&'))。

如果不是最后一个,请键入:jobs并找到以“ []”表示的“职位编号”。然后输入:

fg 2

..其中“ 2”是工作编号,例如:

[email protected]:~/junk/books$ jobs
[1]+  Running                 okular how_to_cook_a_turkey.pdf &
[email protected]:~/junk/books$ fg 1
okular how_to_cook_a_turkey.pdf            <- this is now in the foreground.
6
swisscheese

正确的方法是键入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
4
tmac

我在这里看不到的一件事是pidof,我发现它非常有用,特别是在测试命令时。您可以使用 pidof [command]查找当前正在运行的进程的进程ID。我喜欢它,因为它可以让我快速找到所需命令的ID,通常是我刚刚调用的ID。

一旦有了pid,就可以简单地终止该进程。它允许创建简单的脚本以仅在进程当前正在运行时才杀死该进程。

4
Try431

一个常见的示例是stress工具。假设您执行了以下操作:

$ stress -c 4 -m 4 

并关闭终端窗口。该过程将继续从后台消耗您的资源。

她是我的工作:

$ x=`pgrep stress` ; Sudo kill -9 $x 

pgrep列出要处理的进程的PID,并将其存储到变量x中,然后由kill -9终止它。

1
Saptarshi Ghosh

最简单的方法是在kill命令上使用-9标志

[email protected]:/path> jobs
[1]+  Running                 /usr/home/script1.sh $i &
[email protected]:/path> fg
/usr/home/script1.sh $i
^C
[1]+  Stopped                 /usr/home/script1.sh $i
[email protected]:/path> kill -9 %1
[1]+  Stopped                 /usr/home/script1.sh $i
[email protected]:/path>
[1]+  Killed                  /usr/home/script1.sh $i
[email protected]:/path>
[email protected]:/path> jobs
[email protected]:/path>
0
handba

在bash最后停止的进程(Ctrl-Z)中,您将被杀死:

kill %%
kill -9 %%

或者,如果要选择,请使用:

jobs

然后:

kill %N

喜欢 kill %2

0
Sławomir Lenart