9

Как я могу написать Bash-скрипт, который запускает долго работающую программу и хранит идентификатор процесса программы в отдельном файле?

Я хочу что-то вроде

#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file

Однако выполнение именно этого будет выполнять ps после завершения инструмента .

Есть ли способ получить идентификатор процесса созданного процесса?

2 ответа2

12

Вы можете легко запустить процесс в фоновом режиме с помощью «&», а затем получить PID фонового процесса с помощью «$!"

#!/bin/bash
long_running_tool &
echo $! > pid_file

Тогда, по желанию, подождите $! если вы хотите, чтобы оболочка блокировалась до тех пор, пока процесс не завершит выполнение.

8
#!/bin/bash
echo $$ > fooapp.pid
exec fooapp

Как упоминалось ранее, exec заменяет bash указанной программой, сохраняя PID.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .