Bagaimana saya bisa menulis skrip Bash yang menjalankan program yang berjalan lama dan menyimpan id proses program dalam file terpisah?
Saya menginginkan sesuatu seperti
#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file
Namun melakukan hal ini akan mengeksekusi alatps
setelah selesai.
Apakah ada cara untuk mendapatkan id proses dari proses yang dibuat?
long_running_tool
proses. Akibatnya, eksekutif tidak pernah kembali dan baris berikut tidak pernah tercapai. Lihathelp exec
,execve(2)
.Jawaban:
Anda dapat dengan mudah menjalankan proses di latar belakang dengan "&", lalu mendapatkan PID dari proses latar belakang menggunakan "$!"
Kemudian, secara opsional, tunggu $! jika Anda ingin shell untuk memblokir sampai proses menyelesaikan eksekusi.
sumber
Seperti disebutkan sebelumnya,
exec
menggantikanbash
dengan program yang ditentukan, mempertahankan PID.sumber