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?


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.


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.


+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

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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.