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