Получить PID процесса, запущенного с nohup через ssh

Я хочу запустить процесс, используя nohup на удаленной машине через ssh. Проблема в том, как получить PID процесса, запущенного с nohup, поэтому «процесс на самом деле что-то делает», а не какой-то экземпляр внешней оболочки или тому подобное. Кроме того, я хочу хранить stdout и stderr в файлах, но это не проблема здесь ...

Локально работает без нареканий

nohup sleep 30 > out 2> err < /dev/null & echo $!

Это повторяет мне точный PID команды «sleep 30», который я также могу увидеть, используя «top» или "ps aux | grep sleep".

Но у меня возникли проблемы с удаленным доступом через ssh. Я пробовал что-то вроде

ssh remote_machine 'nohup bash -c "( ( sleep 30 ) & )" > out 2> err < /dev/null'

но я не могу понять, где разместить & quot; echo $! & quot; так что это отображается в моей локальной оболочке. Он всегда показывает мне неправильные идентификаторы PID, например, один из "bash" экземпляр и т. д.

У кого-нибудь есть идеи, как это решить?

РЕДАКТИРОВАТЬ: ОК, "bash -c" может не понадобиться здесь. Как указал Лотарикс, я получаю правильный PID, используя

ssh remote 'nohup sleep 30 > out 2> err < /dev/null & echo $!'

но тогда проблема в том, что если вы замените «сон 30» с чем-то, что производит вывод, скажем, «echo Hello World!», этот вывод не попадает в файл «out», ни на локальной, ни на удаленной стороне. Кто-нибудь понял, почему?

EDIT2: моя вина! На другом устройстве просто не осталось места, поэтому файлы "out" и "err" остался пустым!

Так что это работает. Кроме того, если вы хотите вызвать несколько команд подряд, разделенных точкой с запятой (;), вы все равно можете использовать «bash -c», например так:

ssh remote 'nohup bash -c "echo bla;sleep 30;echo blupp" > out 2> err < /dev/null & echo $!'

Затем он печатает PID «bash -c» на местной стороне, что просто отлично. (Невозможно получить PID «самого внутреннего» или «занятого» процесса, потому что каждая программа сама может порождать новые подпроцессы, способа узнать ...)

Ответы на вопрос(1)

Ваш ответ на вопрос