Получить 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 «самого внутреннего» или «занятого» процесса, потому что каждая программа сама может порождать новые подпроцессы, способа узнать ...)