¿Cómo puedo agregar a un proceso que ya se está ejecutando un comando de "apagado" adicional?

¿Cómo puedo agregar a un proceso que ya se está ejecutando un comando de "apagado" adicional?

Regularmente me olvido de agregar algo && shutdown -h nowa un proceso de larga duración. ¿Hay alguna forma de agregar un shutdown -h nowcomando?después¿Se invocó el primer comando? No se pretende interrumpir el proceso en curso. ¿Quizás sea posible observar el PID?

Respuesta1

No es necesario ejecutar ps repetidamente para enumerar todos los procesos y revisar la salida. Ponga en segundo plano el proceso con Ctrl-Z, luego ejecute

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

Si tiene otros trabajos en segundo plano ejecutándose, se le dará una especificación de trabajo diferente en lugar de [1] cuando presione Ctrl-z. Si es así, úsalo en su lugar.

Respuesta2

Hago esto todo el tiempo.

  1. Inicie el proceso.
  2. Date cuenta de que olvidé hacer mi &&comando.
  3. Presione Ctrl+ Zpara suspender el proceso y regresar al shell.
  4. Correr fg && shutdown -h nowhacia:
    1. Ponga en primer plano y reanude el proceso que acaba de suspender.
    2. Luego, una vez que finalice, ejecutará lo que usted quería ejecutar.

Alternativamente, puede realizar una encuesta como se sugiere en otras respuestas como esta:

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

Respuesta3

Podrías hacer algo como esto, que comprobará si el proceso se ejecuta cada 5 segundos y tomará las medidas adecuadas:

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

Tenga en cuenta los corchetes en la grepexpresión. Esto es para garantizar que el grepproceso no coincida si termina en la pslista. Es suficiente rodear cualquier carácter con corchetes.

Respuesta4

Cree un script de shell para ejecutar ambos procesos:

MiShellScript.txt:

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

Después de guardar esto en el directorio donde inicia el proceso dado, haga lo siguiente:

chmod +x MyShellScript.txt

Luego, cuando quieras ejecutar el comando, simplemente escribe ./MyShellScript.txty hará ambas cosas por ti.

información relacionada