Zaten çalışan bir işleme ek bir 'kapatma' komutu nasıl ekleyebilirim?


11

Düzenli olarak && shutdown -h nowuzun süren bir sürece eklemeyi unutuyorum . İlk komut çağrıldıktan sonrashutdown -h now komut eklemenin bir yolu var mı ? Devam eden süreci kesmek amaçlanmamıştır. Belki PID'yi izlemek mümkündür?


Umarım bundan sonra ne gelirse gelsin &&sadece önceki komut başarılı olursa çalışır. Komut başarısız olsa bile çalışmasını istiyorsanız bunun ;yerine kullanın.
Zoke

Yanıtlar:


13

Tüm işlemleri listelemek ve çıktı boyunca grep'i tekrarlamak için ps'yi tekrar tekrar çalıştırmaya gerek yoktur. İşlemi ctrl-Z ile arka planlayın, ardından çalıştırın

bg %1 ; wait %1 ; shutdown -h now

Çalışmakta olan başka arka plan işleriniz varsa, ctrl-z yaptığınızda [1] yerine farklı bir jobpec verilir. Öyleyse, bunu kullanın.


3

Sürecin her 5 saniyede bir çalışıp çalışmadığını kontrol edecek ve uygun eylemi gerçekleştirecek böyle bir şey yapabilirsiniz:

while true; do
  if ps -ef | grep -q '[l]ong-running-process'; then
    sleep 5
  else
    sudo poweroff
  fi
done

İfadedeki köşeli parantezleri not edin grep. Bunun amacı, grepişlemin pslistede bitmesi durumunda eşleşmemesini sağlamaktır . Herhangi bir karakterin köşeli parantez içine alınması yeterlidir.


Çalıştığı için +1. Tho yapmamın yolu değil.
Zoke

@Zoke: Başka bir yol varsa, ilgilenirim.
Scott Severance

Bir cevap da yayınladı. İsterseniz kontrol edin.
Zoke

Ayrıca, bir işlemin varlığını öldürmeden kontrol etmek için kill -0 (pid) öğesini de kullanabilirsiniz.
kabarık

3

Bunu her zaman yaparım.

  1. İşlemi başlatın.
  2. Benim emrimi yapmayı unuttuğumu fark et &&.
  3. Hit Ctrl+ Zsürecini askıya ve kabuk dönmek için.
  4. Şuraya koş fg && shutdown -h now:
    1. Ön plana alın ve askıya aldığınız işlemi devam ettirin.
    2. Sonra, bittikten sonra, çalıştırmak istediğiniz şeyi çalıştırır.

Alternatif olarak, aşağıdaki gibi diğer yanıtlarda önerildiği gibi anket yapabilirsiniz:

while ps -p $PID ; do sleep 5 ; done ; shutdown -h now

Bu hemen kapanacak.
psusi

Fg

@psusi hayır o olmayacak
Walking Wiki

@WalkingWiki, oh garip, haklısın. Yemin ederim, bunu 2012'de tekrar test ettim ve hemen tamamlandı.
psusi

1

Pid'i biliyorsanız, bunu çalıştırabilirsiniz:

while ps -p $PID; sleep 5; done; shutdown -h now

PS'den yankı olmadan çalıştırmak için şunu yapın:

while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now

Ve son olarak herhangi bir çıktı olmadan arka planda çalıştırmak için:

(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &

Scott'ın çözümü iyi bir çözümdür, ancak greppid'i zaten biliyorsanız, tekrar tekrar yapma ihtiyacını ortadan kaldırır . Ve yazmak çok daha hızlı.: P


0

Her iki işlemi de çalıştırmak için bir kabuk komut dosyası oluşturun:

MyShellScript.txt:

#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now

Bunu verilen işlemi başlattığınız dizine kaydettikten sonra şunları yapın:

chmod +x MyShellScript.txt

Sonra komutu çalıştırmak istediğinizde sadece yazın ./MyShellScript.txtve her ikisini de sizin için yapar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.