2009-10-22 47 views
7

中使用它的名稱殺死進程,但它可以殺死每個Python進程。在Linux(Python)

pkill python 

但是,我不能這樣做:

pkill myscript.py 

我也曾嘗試killall,但沒有運氣無論是。 我必須使用正則表達式嗎?

順便說一下,我想在一個Python腳本中使用import os來做到這一點。

回答

5

你是否從你正在使用的腳本啓動Python子進程?如果是這樣,詳情請參閱this question。如果沒有,您可以使用pkill的-f選項在Python進程的參數列表中搜索腳本名稱,但是仍有可能殺死您不想要的東西。有關更多信息,請參閱man page

0

您需要查找進程ID(pid)。您可以使用命令「ps -A | grep NAME」,然後應用「kill -9 PID」。這些命令可以很容易地轉換成python。

試圖使用「名稱」(如在pkill中)可以產生多個匹配,從而產生意想不到的結果(至少在問題上面設置的上下文中)。

+0

怎麼就這麼從'pkill'不同? – hasen 2009-10-22 23:44:12

+0

你不需要使用pid。您可以使用任何方法來識別流程殺手允許您使用的流程。所有* nix都在內部使用pid,但有時候人們希望殺死所有匹配模式的進程,而不僅僅是特定的pid。 – 2009-10-23 00:02:37

+0

......但是最終你會想到一個pid:就像我上面提到的那樣,通過其他一些方式,有更多的改變來殺死非預期的過程。到過那裏。 – jldupont 2009-10-23 00:31:31

2

您是否能夠將該過程寫入文件pid
在Python你得到的PID這樣的:

import os 
os.getpid() 

殺戮的名字是方便,但有時也有不良的後果,正如你所看到的。

+1

我認爲他試圖從(常規)命令行中殺死一個特定的python腳本,而不是從python – hasen 2009-10-22 23:43:39

+0

適用於兩者。 我想使用pkill myscript.py ...只是爲了學習如何在命令行 – TIMEX 2009-10-22 23:46:46

+1

@hasen中做到這一點,如果你有一個pid文件,使用反引號'kill'cat pid''仍然更容易 – 2009-10-22 23:47:35

-1

試試這個:

echo '#!/usr/bin/env python' > myscript 
cat myscript.py >>myscript 
chmod +x myscript 
./myscript 

當然,你將不得不修改代碼,殺了一個名爲「的MyScript」 過程在UNIX系統上,可執行文件包含開頭,告訴操作系統的幾個字節使用什麼二進制格式。如果前兩個字節是#!,那麼操作系統認爲這實際上是一個可以被另一個程序執行的文本文件,操作系統加載另一個程序並傳遞給它,即文本文件。

在這種情況下,我可能會在頂行寫上#!/usr/bin/python,但是如果您的python在/usr/local/bin中,那麼它將無法工作。相反,我利用env來讓它搜索Python的正常路徑。所有的UNIX系統都有env/usr/bin。有關更多信息,您可以輸入man env

2

sudo kill -9 `pgrep python`

此命令將殺死所有正在運行的進程蟒