#linux #bash #ssh #pid
#linux #bash #ssh #pid
Вопрос:
Я хотел бы начать mbuffer
в режиме прослушивания на удаленном сервере, поэтому я
ssh -f root@10.10.10.46 'mbuffer -4 -v 0 -q -I 8023 > /tmp/mtest amp; echo $!'
и он выводит PID
число, которое я хотел бы сохранить $pidValue
, но если я это сделаю
pidValue=$(ssh -f 10....)
затем он не завершается, пока mbuffer
процесс не завершится.
Вопрос
Как мне получить значение PID из mbuffer
процесса?
Комментарии:
1. Я понимаю, что ваш процесс mbuffer создает его. Если нет, вам нужен способ получить его из процесса. переменная bash $$ здесь вам не поможет, может быть, есть способ создать основу для процесса и получить PID оттуда. fgrep или аналогичный, вероятно, слишком ненадежен, поскольку сложнее определить конкретный процесс, на который вы хотите сослаться, в случае, если он был запущен несколько раз. daemontools может предложить что-то полезное, но мне придется самому посмотреть справочную страницу
2. использование coproc тоже может быть способом: coproc mbuffer -4 -v 0 -q -I 8023; echo $COPROC_PID — это кажется немного излишним, но снижение сложности с помощью функционального неоптимального решения предпочтительнее, чем отсутствие решения, ИМХО
Ответ №1:
перед запуском процесса, который использует удаленный PID, отправьте удаленный файл в локальное хранилище, откуда вы будете обращаться с ним по своему усмотрению.
кажется, что эта конструкция:
read -r var < <(ssh remote "echo test; sleep 5") ; echo $var
может дать вам результаты раньше, но это может зависеть от удаленного процесса, который вы запускаете. Попробуйте это.