Jak uzyskać listę programów uruchomionych z nohup

81

Uzyskuję dostęp do serwera z systemem CentOS (dystrybucja Linuksa) z połączeniem SSH. Ponieważ nie zawsze mogę być zalogowany, używam „nohup [polecenie] &” do uruchamiania programów.

Nie mogłem znaleźć listy wszystkich programów, z których zacząłem używać nohup. „Jobs” działa tylko przed wylogowaniem. Po tym, jeśli ponownie się zaloguję, polecenie jobs nic nie pokazuje, ale w plikach dziennika mogę zobaczyć, że moje programy nadal działają.

Czy jest sposób, aby uzyskać listę wszystkich programów, z których zacząłem używać „nohup”?

Nils De Winter
źródło
Znalazłem doskonały artykuł, który może pomóc w zadaniu pytania: cyberciti.biz/faq/… . Co najważniejsze, pomocne jest zinterpretowanie wyniku działania polecenia ps, zwłaszcza kolumny stat. Jeśli nie, przeczytaj artykuł TERAZ ;-)
jumping_monkey

Odpowiedzi:

115

Kiedy zacząłem $ nohup storm dev-zookeper,

METODA 1: za pomocą jobs,

prayagupd@prayagupd:/home/vmfest# jobs -l
[1]+ 11129 Running                 nohup ~/bin/storm/bin/storm dev-zookeeper &

METODA 2: za pomocą pspolecenia.

$ ps xw
PID  TTY      STAT   TIME COMMAND
1031 tty1     Ss+    0:00 /sbin/getty -8 38400 tty1
10582 ?        S      0:01 [kworker/0:0]
10826 ?        Sl     0:18 java -server -Dstorm.options= -Dstorm.home=/root/bin/storm -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dsto
10853 ?        Ss     0:00 sshd: vmfest [priv] 

Kolumna TTY z ?=> nohupuruchomionymi programami.

Opis

  • Kolumna TTY = terminal powiązany z procesem
  • Kolumna STAT = stan procesu
    • S = przerywany sen (oczekiwanie na zakończenie zdarzenia)
    • l = jest wielowątkowy (używając CLONE_THREAD, tak jak robią to pthreads NPTL)

Odniesienie

$ man ps #, a następnie wyszukaj /PROCESS STATE CODES

prayagupd
źródło
5
Metoda 2 nie zawiera listy programów, które zostały uruchomionenohup . Zawiera listę procesów, które nie są dołączone do terminala TTY, co jest zupełnie inną rzeczą: procesy uruchomione za pomocą nohuppozostają dołączone do swojego nadrzędnego TTY, dopóki nie zostanie zamknięty; procesy, które nie są dołączone do urządzenia TTY, niekoniecznie zostały uruchomione nohup. Oznacza to, że metoda 2 wymienia, między innymi , niektóre programy działające z nohup.
Arcturus B
4
jobs nie działa dla mnie, działa tylko dla tej samej sesji ssh, jeśli
rozłączę się i połączę
29

Zamiast tego nohuppowinieneś użyć screen. Osiąga ten sam rezultat - Twoje polecenia działają „odłączone”. Możesz jednak wznowić sesje ekranowe i wrócić do ich „ukrytego” terminala i zobaczyć ostatni postęp w tym terminalu.

screenma wiele opcji. Najczęściej używam tych:

Aby rozpocząć pierwszą sesję ekranu lub przejąć ostatnią odłączoną:

screen -Rd 

Aby odłączyć się od bieżącej sesji: Ctrl+ACtrl+D

Możesz także uruchomić wiele ekranów - przeczytaj dokumentację.

mvp
źródło
6
Wydaje mi się, że to dobra alternatywa dla mnie. Dowiedziałem się również, że mogę znaleźć PIDy z "ps auwx"
Nils De Winter
7
Pytanie wyraźnie zadaje Czy istnieje sposób na uzyskanie listy wszystkich programów, z których zacząłem używać „nohup”? , ale ta odpowiedź nawet w niewielkim stopniu nie odpowiada na pytanie. Dlaczego jest to akceptowane?
Luke Joshua Park
3
Ponieważ w 2013 roku była to jedyna odpowiedź, która pomogła.
Nils De Winter,
21

Jeśli masz standardowe przekierowanie wyjścia do „nohup.out”, po prostu zobacz, kto używa tego pliku

lsof | grep nohup.out
Victor Melnikov
źródło
1
To sprytny sposób. Ale w moim przypadku to nie daje rezultatów. Chociaż jestem pewien, że polecenie nohup nadal działa i używa pliku nohup.out.
Julius Š.
1
Jest w porządku we wszystkich TTY, ale pokaż podwójny proces dla każdego nohup!
Nabi KAZ
@ NabiK.AZ from man lsof: "Ogólnie wątki i zadania dziedziczą pliki dzwoniącego, ale niektóre mogą zamykać i otwierać inne, więc lsof zawsze raportuje wszystkie otwarte pliki wątków i zadań." Nie mogłem znaleźć informacji o nohup w jego człowieku, ale wygląda na to, że używa dwóch wątków, a nie jednego.
Jarosław Nikitenko
6

Nie można dokładnie uzyskać listy poleceń, od których rozpoczęto, nohupale można je zobaczyć wraz z innymi procesami za pomocą polecenia ps x. Polecenia rozpoczęte od nohupbędą miały znak zapytania w kolumnie TTY.

Old Pro
źródło
3
"ps x" nie pomogło, ale okazało się, że "ps auxw" tak.
Nils De Winter
5

Możesz także po prostu użyć górnej komendy, a Twój identyfikator użytkownika wskaże uruchomione zadania i ich czasy.

$ top

(to pokaże wszystkie uruchomione zadania)

$ top -U [user ID]

(Spowoduje to wyświetlenie zadań specyficznych dla identyfikatora użytkownika)

Jcrow06
źródło
Dodatkowo miłą rzeczą jest to, że pozostaje na konsoli, dzięki czemu możesz oglądać pracę i wiedzieć, kiedy się skończy
rgilligan