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 grepekspresi. Ini untuk memastikan bahwa grepprosesnya tidak cocok jika berakhir di psdaftar. Mengelilingi setiap karakter tunggal dengan tanda kurung adalah cukup.
Saya melakukan ini sepanjang waktu.
&&perintah saya .fg && shutdown -h nowke:
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 grepberulang-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.txtdan itu akan melakukan keduanya untuk Anda.
&&hanya akan berjalan jika perintah sebelumnya berhasil. Jika Anda ingin menjalankannya bahkan jika perintah gagal digunakan;sebagai gantinya.