2013-09-26 27 views
1

我遇到以下情況: perl腳本讀取應用程序寫入它的文件pid,並試圖殺死它。 但問題是我不想殺死另一個進程,所以我檢查當前進程與記錄的PID是否有相同的命令行。如果是這樣,應用程序可能會被殺死。如何僅在當前用戶的進程中找到進程的命令行

以下布魯斯腳本找出CMDLINE:

$PIDCMDLINE = `ps -p $PID -o cmd`; 

的問題是,如果另一個實例爲其他用戶是最多的,也許在相同的SID,它會被殺死,因爲它會返回一個有效的命令線,而我不想要那樣的行爲。

我怎麼能限制PS -p只搜索當前用戶的過程(不,簡單ps不算數,因爲-p nullify PS的默認效果)

謝謝!

+2

如果你不是根用戶,你不能殺其他用戶的進程。 – choroba

+0

如果您在Linux或其他帶有'/ proc'的系統上,那麼您可以檢查'/ proc/$ PID'的uid。 –

回答

1

您可以使用下面的檢查指揮與用戶對特定PID:

ps -p <PID> -o user,cmd --columns 1000 | grep `whoami` 

添加根據評「grep的」。

+0

我可以告訴ps,我只對當前用戶感興趣,沒有先找到它,然後將它傳遞給ps?否則,很好的答案。謝謝。 – nucandrei

+0

您可以添加一個簡單的grep: ps -p -o user,cmd --columns 1000 | grep'whoami' – imapollo

+1

@imapollo而不是使用管道來輸出'grep',你可以這樣說:'ps -u $(whoami)-p -o cmd' – devnull

0

可能會有點尷尬,但你看這個:

$PIDCMDLINE = ps -p $PID -o user,command | grep `whoami` | awk '{ print $2 }' 
+0

查找命令行的簡單目的有點複雜,同時還創建了3個新進程,並且我無法承受這種奢侈。 – nucandrei

+0

@nucandrei可以添加'awk'比在主腳本中分割'user command'輸出更昂貴。 –

相關問題