我正在尝试捕获我为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。
答案 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进行评估