以另一个用户身份执行命令并获取该进程的PID

时间:2014-09-10 03:51:22

标签: linux bash init pid

我正在尝试捕获我为init脚本运行的程序的PID,以便我可以稍后再回来杀死它。当我在不使用其他用户的情况下运行脚本时,该命令工作得很好,我在一个变量中获得了PID。我可以执行与不同用户相同的命令,但是,我无法获取该命令的PID以存储在变量中。这就是我得到的。

[root@fenix-centos ~]# PID=`su - $USER -c "$DAEMONPATH $DAEMONPATHARGS $DAEMON $DAEMONARGS > /dev/null 2>&1 & echo \$! "`
[root@fenix-centos ~]# echo $PID

......什么都没有。是否有一些奇怪的事情会阻止我获取由不同用户启动的进程的PID并将该PID存储在变量中?这个过程仍然开始,但我没有得到PID。

1 个答案:

答案 0 :(得分:1)

在浏览到您脚本的链接后,我建议采用这种方法:

在文件中执行变量(您将作为参数传递给命令su)分配:

[tom@jenkins ]# cat source_file
DAEMONPATH=/usr/bin/java
DAEMONPATHARGS='-jar -Xmx768'
DAEMON=/opt/megamek-0.38.0/MegaMek.jar
DAEMONARGS='-dedicated -port 2346'

在命令中输入上述文件:

PID=`su - $USER -c '. source_file; $DAEMONPATH $DAEMONPATHARGS $DAEMON $DAEMONARGS > /dev/null 2>&1 & echo $! '`

似乎您的语法不起作用,因为$!必须由运行su的原始shell而不是su运行的 shell进行评估