我想由另一个用户运行此命令(因此使用 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?
答案1
我找到了一个解决方案:
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。