Su

如何獲取在那裡執行的 su –session-command 文件的 pid

  • December 23, 2013

此行在腳本中執行

su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
pid="$(<$pidFile)"
echo $pid

Pid 比 su 執行的程序的實際 Pid 加一。

我如何獲得該程序的 pid?

我從 serverfault stackexchange 得到了答案。通過Daniel t.@ https://serverfault.com/questions/563087/sh-bash-script-ambiguous-redirect-pid-of-file-using-single-quotes

引:

程序 ID 減一,因為您&$javaCommandLine. 換句話說,您在呼叫 之前已將兩個程序置於後台echo $!,從而獲得了 >>$serviceLogFile 2>&1而不是的 PID $javaCommandLine。正如舊的 2 行程式碼所示,這兩部分應該合二為一

 su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1

您可能需要將其更改為 -

 su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1

引用自:https://unix.stackexchange.com/questions/106314