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

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

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

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

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

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

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

но я не могу понять, где разместить "эхо $! " так что это отображается в моей локальной оболочке. Это всегда показывает мне неправильные PID, например, один из "Баш» экземпляр и т. д.

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

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

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

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

EDIT2: моя вина! На другом устройстве просто не осталось места,почему файлы "из" а также "эээ» остался пустым!

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

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

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

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

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