【发布时间】:2018-05-17 17:59:35
【问题描述】:
我正在编写 init.d 脚本,但在保存分叉进程 pid 时遇到了一些问题。
这是我的初始化脚本片段:
sudo -u $USER nohup -- nice -n "0" java Test >> /dev/null 2>&1 < /dev/null &
NEWPID="$!"
echo $NEWPID
但是当我运行这个脚本时,我会打印以下 pid
$./scr.sh
4595
但是
$ps | grep java
4596 pts/23 00:00:01 java
如您所见,pids 是不同的(4596 和 4595)。但是如果尝试写如下:
java Test &
NEWPID="$!"
echo $NEWPID
我得到了正确的结果:
$./scr.sh
4653
$ps | grep java
4653 pts/23 00:00:03 java
第一个有什么问题?
【问题讨论】:
-
sudo lanch 一个shell,然后进程再次分叉
-
您可能正在获取(临时)
sudo进程的 PID... -
没有“可能”;
sudo是在后台运行的命令,所以这就是$!报告的内容。 -
@chepner 所以在 init.d 脚本中使用
sudo ...是个坏习惯?我必须由适当的用户运行初始化脚本? -
@m47730 你能不能建议一个方法来解决这个问题?