Linux

如何在 Debian8 上獲取 su 螢幕 PID?

  • November 10, 2016

我想由另一個使用者執行這個命令(所以使用 su):screen -ALmdS server_mta ./mta-server -n

沒關係:su - server_2 -c 'screen -ALmdS server_mta ./mta-server -n

但是我需要螢幕的PID,但是當我嘗試獲取時,我得到了另一個PID。

我試過這個方法:

su - server_2 -c "screen -ALmdS server_mta ./mta-server -n >>~/outlog 2>&1 & echo \$! "

但它給出了 5996 PID,但是當我檢查它ps ax |grep server_mta的結果是:

5997 ?        Ss     0:00 SCREEN -ALmdS server_mta ./mta-server -n
6023 pts/45   S+     0:00 grep server_mta

我試過這個命令:

su - server_2 -c 'screen -ALmdS server_mta ./mta-server -n > /dev/null & ps ax |grep  $! '

結果是:

6829 ?        R      0:00 screen -ALmdS server_mta ./mta-server -n
6831 ?        S      0:00 grep 6829

我以為我得到了 PID,當我再次檢查時ps ax |grep server_mta,我得到了另一個 PID。這裡的區別是螢幕是小寫的,當我簽ps ax |grep server_mta入時,這是大寫的。

如何獲得由另一個使用者使用 su 執行的螢幕程序的 PID?

我找到了一個解決方案:

su - server_2 -c "screen -ALmdS server_mta ./mta-server -n  >>/home/out 2>&1"; pgrep -u server_2 |  xargs ps -p | grep SCREEN | cut -f1 -d' ' | head -n 1

這將返回螢幕的 PID。

引用自:https://serverfault.com/questions/813985