GNU/Linux >> Znalost Linux >  >> Linux

Jak získat ID procesu pro ukončení procesu nohup?

práce -l by vám měl poskytnout pid pro seznam procesů nohup. Kill (-9) je jemně.;)


Používám red hat linux na serveru VPS (a přes SSH - putty), pro mě fungovalo následující:

Nejprve vypíšete všechny běžící procesy:

ps -ef

Poté v prvním sloupci najdete své uživatelské jméno; Našel jsem to třikrát:

  • Jedním z nich bylo připojení SSH
  • Druhým bylo připojení FTP
  • Poslední byl proces nohup

Poté ve druhém sloupci najdete PID procesu nohup a zadáte pouze:

kill PID 

(samozřejmě nahrazením PID PID procesu nohup)

A je to!

Doufám, že tato odpověď bude užitečná pro někoho, kdo jsem také velmi nový v bash a SSH, ale našel jsem zde 95 % znalostí, které potřebuji :)


předpokládejme, že na pozadí spouštím ruby ​​skript s níže uvedeným příkazem

nohup ruby script.rb &

pak mohu získat pid výše uvedeného procesu na pozadí zadáním názvu příkazu. V mém případě je příkaz ruby.

ps -ef | grep ruby

výstup

ubuntu   25938 25742  0 05:16 pts/0    00:00:00 ruby test.rb

Nyní můžete proces snadno zabít pomocí příkazu kill

kill 25938

Při použití nohup a dáte úlohu na pozadí, operátor na pozadí (& ) vám na příkazovém řádku poskytne PID. Pokud máte v plánu řídit proces ručně, můžete si toto PID uložit a použít jej později k ukončení procesu, pokud to bude potřeba, pomocí kill PID nebo kill -9 PID (pokud potřebujete zabít násilím). Případně můžete PID najít později pomocí ps -ef | grep "command name" a odtud vyhledejte PID. Všimněte si, že nohup samotné klíčové slovo/příkaz se v ps neobjevuje výstup pro daný příkaz.

Pokud používáte skript, můžete ve skriptu provést něco takového:

nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt

Tím se spustí my_command uložení veškerého výstupu do my.log (ve skriptu $! představuje PID posledního provedeného procesu). 2 je deskriptor souboru pro standardní chybu (stderr ) a 2>&1 řekne shellu, aby směroval standardní chybový výstup na standardní výstup (deskriptor souboru 1 ). Vyžaduje &1 takže shell ví, že se v tomto kontextu jedná o deskriptor souboru, nikoli pouze o soubor s názvem 1 . 2>&1 je potřeba k zachycení všech chybových zpráv, které se normálně zapisují do standardní chyby do našeho my.log soubor (který pochází ze standardního výstupu). Další podrobnosti o práci s přesměrováním I/O pomocí shellu naleznete v části Přesměrování I/O.

Pokud příkaz odesílá výstup pravidelně, můžete výstup občas zkontrolovat pomocí tail my.log , nebo pokud to chcete sledovat "živě", můžete použít tail -f my.log . Nakonec, pokud potřebujete proces ukončit, můžete to udělat pomocí:

kill -9 `cat save_pid.txt`
rm save_pid.txt

Linux
  1. Jak mohu zabít proces podle jména místo PID?

  2. Jak předat argumenty příkazového řádku běžícímu procesu na systémech unix/linux?

  3. Jak získat ID procesu na pozadí?

  1. Jak získat PID z rozvětveného podřízeného procesu ve skriptu shellu

  2. Jak dosáhnout toho, aby se pro konkrétní proces spustil pouze uživatel, pid a příkaz? (Ubuntu 11.10)

  3. Jak získat pid procesu a vyvolat na něj kill -9 ve skriptu shellu?

  1. Jak zabít proces zombie na Linuxu

  2. Jak zjistit ID procesu (pid) běžícího terminálového programu?

  3. Jak najít soubor .pid pro daný proces