Я хочу запустить эту команду другим пользователем (как и 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
, это прописные буквы.
Как я могу получить PID моего экранного процесса, который запускается другим пользователем с su?
Я нашел решение:
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 экрана.