Как я могу написать Bash-скрипт, который запускает долго работающую программу и хранит идентификатор процесса программы в отдельном файле?
Я хочу что-то вроде
#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file
Однако выполнение именно этого приведет к выполнению инструментаps
after .
Есть ли способ получить идентификатор процесса созданного процесса?
long_running_tool
процессом. Следовательно, exec никогда не возвращается, и следующая строка никогда не достигается. Смhelp exec
,execve(2)
.Ответы:
Вы можете легко запустить процесс в фоновом режиме с помощью «&», а затем получить PID фонового процесса с помощью «$!»
Тогда, по желанию, подождите $! если вы хотите, чтобы оболочка блокировалась до тех пор, пока процесс не завершит выполнение.
источник
Как упоминалось ранее,
exec
заменяетсяbash
указанной программой, сохраняя PID.источник