GNU/Linux >> Linux Esercitazione >  >> Linux

C'è un modo per ascoltare il processo?

Un approccio, certamente pesante, è usare strace :

$ strace -e trace=none -e signal=none -p 12345

osserverà il processo con PID 12345, non intercettando nessuna chiamata di sistema (primo -e ) e nessun segnale (secondo -e ). Una volta terminato il processo in modo regolare, verrà stampato il valore di uscita.

Se il processo viene terminato da un segnale, strace esce silenziosamente (se eseguito con le opzioni fornite sopra). Puoi usare ad es. -e signal=kill per cambiare questo comportamento. Nota, tuttavia, che -e signal=all (o, equivalentemente, omettendo il -e signal opzione) potrebbe produrre una grande quantità di output se i segnali vengono ricevuti e gestiti dal programma.


  1. Concatenamento dell'esecuzione di "notify"

    $ process; notify $? &
    

    Si noti che se il processo terminerà in modo imprevisto notify non verrà eseguito

  2. Impostare trap

    Il processo è segnalato da segnali di significato diverso e può reagire in modo appropriato

    #!/bin/bash
    
    process
    
    function finish {
        notify $?
    }
    trap finish EXIT
    

Non ti è chiaro quale notifica hai in mente. In sostanza può essere qualsiasi cosa che suoni un "campanello", ovviamente. Uno per molti es. notify-send da libnotify libreria.

$ process; notify-send "process finished with status $?" &

Bash fa questo per te. Ti avviserà al termine del processo restituendoti il ​​controllo e memorizzerà lo stato di uscita nella variabile speciale $? . Sembra più o meno così:

someprocess
echo $?

Consulta il manuale di bash sui parametri speciali per maggiori informazioni.

Ma presumo che tu voglia fare altro lavoro mentre aspetti. In bash puoi farlo in questo modo:

someprocess &
otherwork
wait %+
echo $?

someprocess & avvierà il processo in background. Ciò significa che il controllo tornerà immediatamente e potrai svolgere altro lavoro. Un processo avviato in background è chiamato lavoro in bash. wait attenderà il completamento del lavoro specificato e quindi restituirà lo stato di uscita di quel lavoro. I lavori sono referenziati da %n . %+ si riferisce all'ultimo lavoro iniziato. Consulta il manuale di bash sul controllo dei processi per maggiori informazioni.

Se hai davvero bisogno del PID puoi anche farlo in questo modo:

someprocess &
PID=$!
otherwork
wait $PID
echo $?

$! è una variabile speciale contenente il PID dell'ultimo processo in background avviato.


Linux
  1. C'è un modo per cambiare le variabili d'ambiente di un altro processo in Unix?

  2. C'è un modo per "uniq" per colonna?

  3. C'è un modo per ispezionare l'attuale rpath su Linux?

  4. C'è un modo per riprendere uno scp interrotto di un file?

  5. C'è un modo per copiare il testo in htop?

C'è un modo per ritagliare un file NETCDF?

C'è un modo per rinominare un progetto Cargo?

C'è un modo per avviare vim in modalità di sola lettura

C'è un modo per riavviare i badblock?

C'è un modo per limitare il consumo complessivo della CPU?

C'è un modo per scaricare le informazioni CPUID di una CPU?