Bagaimana saya bisa menambahkan ke proses yang sudah berjalan perintah 'shutdown' tambahan?

11

Secara teratur saya lupa menambahkan && shutdown -h nowproses yang sudah berjalan lama. Apakah ada cara untuk menambahkan shutdown -h nowperintah setelah perintah pertama dipanggil? Itu tidak dimaksudkan untuk mengganggu proses yang sedang berlangsung. Mungkin bisa menonton PID?

brubaker
sumber
Saya harap Anda menyadari bahwa apa pun yang terjadi setelahnya &&hanya akan berjalan jika perintah sebelumnya berhasil. Jika Anda ingin menjalankannya bahkan jika perintah gagal digunakan ;sebagai gantinya.
Zoke

Jawaban:

13

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.

psusi
sumber
3

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.

Scott Severance
sumber
+1 sejak berhasil. Bukan cara saya akan melakukannya tho.
Zoke
@Zoke: Jika ada cara lain, saya akan tertarik.
Scott Severance
Diposting jawaban juga. Lihat itu jika Anda suka.
Zoke
Anda juga dapat menggunakan kill -0 (pid) untuk memeriksa keberadaan suatu proses tanpa membunuhnya.
fluffy
3

Saya melakukan ini sepanjang waktu.

  1. Mulai prosesnya.
  2. Sadarilah bahwa saya lupa melakukan &&perintah saya .
  3. Tekan Ctrl+ Zuntuk menunda proses dan kembali ke shell.
  4. Lari fg && shutdown -h nowke:
    1. Latar depan dan lanjutkan proses yang baru saja Anda tunda.
    2. Kemudian, setelah selesai, itu akan menjalankan apa yang ingin Anda jalankan.

Atau, Anda dapat memilih seperti yang disarankan dalam jawaban lain seperti ini:

while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
Naftuli Kay
sumber
Itu akan segera mati.
psusi
Fg selesai segera, jadi ...
psusi
@psusi tidak, itu tidak akan
Walking Wiki
@WalkingWiki, oh aneh, Anda benar. Saya bersumpah saya menguji ini kembali pada tahun 2012 dan segera selesai.
psusi
1

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

Zoke
sumber
0

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.

Chris Curry
sumber