Jawaban:
Tidak perlu berulang kali menjalankan ps untuk mencantumkan semua proses dan menangkap melalui output. Latar belakang proses dengan ctrl-Z, lalu jalankan
bg %1 ; wait %1 ; shutdown -h now
Jika Anda memiliki pekerjaan latar belakang lain yang sedang berjalan, maka Anda akan diberikan jobspec yang berbeda alih-alih [1] saat Anda ctrl-z. Jika demikian, gunakan itu sebagai gantinya.
Anda dapat melakukan sesuatu seperti ini, yang akan memeriksa apakah proses berjalan setiap 5 detik dan mengambil tindakan yang sesuai:
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
sudo poweroff
fi
done
Perhatikan tanda kurung siku dalam grep
ekspresi. Ini untuk memastikan bahwa grep
prosesnya tidak cocok jika berakhir di ps
daftar. Mengelilingi setiap karakter tunggal dengan tanda kurung adalah cukup.
Saya melakukan ini sepanjang waktu.
&&
perintah saya .fg && shutdown -h now
ke:
Atau, Anda dapat memilih seperti yang disarankan dalam jawaban lain seperti ini:
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
Jika Anda tahu pid, Anda dapat menjalankan ini:
while ps -p $PID; sleep 5; done; shutdown -h now
Untuk menjalankan tanpa gema dari ps lakukan ini:
while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now
Dan akhirnya menjalankannya di latar belakang tanpa output apa pun:
(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &
Solusi Scott adalah solusi yang bagus, tetapi ini menghilangkan kebutuhan untuk grep
berulang-ulang jika Anda sudah tahu pid. Dan itu jauh lebih cepat untuk mengetik.: P
Buat skrip shell untuk menjalankan kedua proses:
MyShellScript.txt:
#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now
Setelah menyimpan ini di direktori tempat Anda memulai proses yang diberikan, lakukan:
chmod +x MyShellScript.txt
Kemudian ketika Anda ingin menjalankan perintah ketik saja ./MyShellScript.txt
dan itu akan melakukan keduanya untuk Anda.
&&
hanya akan berjalan jika perintah sebelumnya berhasil. Jika Anda ingin menjalankannya bahkan jika perintah gagal digunakan;
sebagai gantinya.