GNU/Linux >> Znalost Linux >  >> Linux

Existuje způsob, jak naslouchat procesu?

Jedním – nepochybně těžkopádným – přístupem je použití strace :

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

bude proces sledovat s PID 12345, nezachytí žádné systémové volání (první -e ) a žádné signály (druhý -e ). Jakmile proces skončí běžným způsobem, bude vytištěna výstupní hodnota.

Pokud je proces ukončen signálem, strace se tiše ukončí (při spuštění s výše uvedenými možnostmi). Můžete použít např. -e signal=kill změnit toto chování. Všimněte si však, že -e signal=all (nebo ekvivalentně vynecháním -e signal volba) může produkovat velké množství výstupu, pokud jsou signály přijímány a zpracovávány programem.


  1. Řetězení provádění „notify“

    $ process; notify $? &
    

    Všimněte si, že pokud proces skončí neočekávaným způsobem notify nebude proveden

  2. Nastavení pastí

    Proces je signalizován signály jiného významu a může vhodně reagovat

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

Není vám jasné, jaké oznámení máte na mysli. V podstatě to může být cokoliv, co samozřejmě zazvoní. Jeden za mnoho, např. notify-send od libnotify knihovna.

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

Bash to udělá za vás. Upozorní vás na ukončení procesu tím, že vám vrátí kontrolu a uloží stav ukončení do speciální proměnné $? . Vypadá to zhruba takto:

someprocess
echo $?

Další informace naleznete v příručce bash o speciálních parametrech.

Předpokládám ale, že na počkání chcete dělat jinou práci. V bash to můžete udělat takto:

someprocess &
otherwork
wait %+
echo $?

someprocess & spustí proces na pozadí. To znamená, že ovládání se okamžitě vrátí a vy můžete dělat jinou práci. Proces spuštěný na pozadí se v bash nazývá job. wait počká na dokončení dané úlohy a poté vrátí stav ukončení této úlohy. Na úlohy se odkazuje %n . %+ odkazuje na poslední zahájenou práci. Další informace naleznete v příručce bash o řízení úloh.

Pokud opravdu potřebujete PID, můžete to udělat také takto:

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

$! je speciální proměnná obsahující PID posledního spuštěného procesu na pozadí.


Linux
  1. Přenosný (posix) způsob, jak dosáhnout substituce procesu?

  2. Existuje způsob, jak „uniq“ podle sloupce?

  3. Existuje způsob, jak zkontrolovat aktuální rpath v Linuxu?

  1. Existuje způsob, jak převést z UTF8 na ISO-8859-1?

  2. Existuje způsob, jak pokračovat v procesu příkazu scp (zabezpečená kopie) v Linuxu?

  3. Existuje způsob, jak oříznout soubor NETCDF?

  1. Existuje způsob, jak restartovat špatné bloky?

  2. Existuje způsob, jak omezit celkovou spotřebu CPU?

  3. Existuje způsob, jak vypsat informace CPUID CPU?