Я хочу запустить удаленный процесс асинхронно и получить его удаленный pid, вывод (stdout + stderr), сохраненный в файл или переменную (он мне нужен для дальнейшей обработки) и код выхода.
Удаленный pid необходим во время работы удаленного процесса, а не после его завершения.
Кроме того, на удаленном компьютере выполняется несколько процессов с одинаковым именем, поэтому любое решение, использующее имя процесса, не будет работать для меня.
Что у меня так далеко:
export SSH="ssh -o ServerAliveInterval=100 $user@$remote_ip"
и "my_test" - это двоичный файл, который я хочу запустить.
Чтобы получить удаленный pid и вывод, я попытался:
$SSH "./my_test > my_test_output & echo \$! > pid_file"
remote_pid=$($SSH "cat pid_file")
# run some remote application which needs the remote pid (send signals to my_test)
$SSH "./some_tester $remote_pid"
# now wait for my_test to end and get its exit code
$SSH "wait $remote_pid; echo $?"
bash: wait: pid 71033 is not a child of this shell
Команда $ SSH возвращается после вывода удаленного pid в файл pid_file, поскольку к этому сокету ssh не подключены файловые дескрипторы (https://unix.stackexchange.com/a/30433/316062).
Есть ли способ как-нибудь получить код выхода my_test?