2013-09-26 40 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'输出更昂贵。 –

相关问题