如何将pid写入文件

时间:2014-11-24 16:21:42

标签: linux bash shell init startupscript

我知道这很容易,但我无法弄明白。 我们想在一台机器上运行两个luigi实例,因此需要修改init.d脚本以将PID写入文件而不是仅触摸空文件。

echo -n $"Starting luigid scheduler as $LUIGID_USER: "
( ( /usr/bin/sudo -u $LUIGID_USER $LUIGID_BIN >>/var/log/luigid/server.log 2>&1 ) &)
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/luigid && echo_success || echo_failure
echo
return $RETVAL

目前它只是触及空的PID文件。我希望它将PID写入文件。 同时停止我想通过存储在PID文件中的PID来杀死

echo -n $"Stopping luigid scheduler: "
killproc luigid
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/luigid && echo_success || echo_failure
echo

请帮忙吗?

由于

2 个答案:

答案 0 :(得分:7)

您可以使用PID

获取上一个命令的$!

将启动脚本更改为:

echo -n "Starting luigid scheduler as $LUIGID_USER: "
/usr/bin/sudo -u $LUIGID_USER $LUIGID_BIN >>/var/log/luigid/server.log 2>&1 &
RETVAL=$?
PID=$!
[ $RETVAL -eq 0 ] && echo $PID > /var/lock/subsys/luigid && echo_success || echo_failure
echo
return $RETVAL

注意,在子shell中启动程序时,需要从命令周围删除括号。子shell不会将已启动程序的PID返回给shell,因此您应该直接从shell中调用它。

答案 1 :(得分:0)

manshlock应该为我所相信的做法:

shlock [-du] [-p PID] -f lockfile

...

shlock uses the link(2) system call to make the final target lock file, which
is an atomic operation (i.e. "dot locking", so named for this mechanisms 
original use for locking system mailboxes).  It puts the process ID ("PID") 
from the command line into the requested lock file.

或者根据情况(manflock,一个很好的例子可以查看: http://codehackit.blogspot.fr/2013/04/locking-processes-with-flock.html