GNU/Linux >> Znalost Linux >  >> Linux

Zastavit/ukončit proces z příkazového řádku po určité době?

Mám kód Pythonu, který poslouchá a detekuje zvuky prostředí. Není to můj projekt, našel jsem ho na webu (SoPaRe). Pomocí ./sopare.py -l spustí nahrávání zvuků, ale v nekonečné smyčce. Když to chci zastavit, musím stisknout Ctrl+C .

Mým cílem je tento program automaticky zastavit po 10 sekundách, ale když jsem mluvil s autorem, řekl, že program nemá časový limit.

Zkusil jsem to zabít pomocí kill PID , ale PID se mění při každém spuštění programu. Jak to zastavit po časovém intervalu pomocí bash ?

Případně mohu tento příkaz provést z pythonu pomocí os.system() příkaz.

Přijatá odpověď:

Nejjednodušším řešením by bylo použít timeout z kolekce GNU coreutils (pravděpodobně ve výchozím nastavení na většině systémů Linux):

timeout 10 ./sopare.py -l

Další možnosti naleznete v příručce k tomuto nástroji (man timeout ). Na systémech bez GNU lze tento nástroj nainstalovat jako gtimeout pokud je GNU coreutils vůbec nainstalován.

Další alternativou, pokud GNU coreutils není k dispozici, je spustit proces na pozadí a počkat 10 sekund, než mu odešlete signál ukončení:

./sopare.py -l &
sleep 10
kill "$!"

$! bude ID procesu naposledy spuštěného procesu na pozadí, v tomto případě vašeho skriptu Python.

V případě, že je čekací doba využita na jiné věci:

./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"

Linux
  1. Použití Stratisu ke správě linuxového úložiště z příkazového řádku

  2. Najděte čas provedení příkazu nebo procesu v systému Linux

  3. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  1. Jak restartovat Icewm z příkazového řádku?

  2. Najít N nejfrekventovanějších slov v souboru se seznamem stop slov z příkazového řádku?

  3. Spouštějte skripty Perl/PHP z příkazového řádku

  1. Migrace linuxového serveru z příkazového řádku

  2. Najděte verzi WordPress z příkazového řádku

  3. Jak spustit GUI linuxové programy z příkazového řádku, ale odděleně od příkazového řádku?