Cách lấy danh sách các chương trình đang chạy với nohup


81

Tôi đang truy cập máy chủ chạy CentOS (phân phối linux) bằng kết nối SSH. Vì tôi không thể luôn luôn đăng nhập, tôi sử dụng "nohup [command] &" để chạy các chương trình của mình.

Tôi không thể tìm thấy cách lấy danh sách tất cả các chương trình mà tôi đã bắt đầu sử dụng nohup. "Công việc" chỉ hoạt động trước khi tôi đăng xuất. Sau đó, nếu tôi đăng nhập lại, lệnh công việc không hiển thị gì, nhưng tôi có thể thấy trong tệp nhật ký của mình rằng chương trình của tôi vẫn đang chạy.

Có cách nào để lấy danh sách tất cả các chương trình mà tôi đã bắt đầu sử dụng "nohup" không?


Đã tìm thấy một bài báo xuất sắc có thể giúp trả lời câu hỏi: cyberciti.biz/faq/… . Quan trọng nhất, sẽ rất hữu ích nếu bạn có thể diễn giải đầu ra của lệnh ps, đặc biệt là cột stat. Nếu bạn không, hãy đọc bài viết NGAY BÂY GIỜ ;-)
jump_monkey

Câu trả lời:


115

Khi tôi bắt đầu với $ nohup storm dev-zookeper,

PHƯƠNG PHÁP1: sử dụng jobs,

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

Phương pháp 2: sử dụng pslệnh.

$ 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] 

Cột TTY với ?=> nohupchương trình đang chạy.

Sự miêu tả

  • Cột TTY = thiết bị đầu cuối được liên kết với quy trình
  • Cột STAT = trạng thái của một quy trình
    • S = ngủ gián đoạn (chờ một sự kiện hoàn thành)
    • l = là đa luồng (sử dụng CLONE_THREAD, như NPTL pthreads làm)

Tài liệu tham khảo

$ man ps # rồi tìm kiếm /PROCESS STATE CODES


5
Phương pháp 2 không liệt kê các chương trình đã được bắt đầunohup . Nó liệt kê các quy trình không được gắn với TTY, đó là một điều hoàn toàn khác: các quy trình được bắt đầu nohupvẫn gắn với TTY mẹ của chúng cho đến khi nó bị đóng lại; các quy trình không gắn với TTY không nhất thiết phải bắt đầu bằng nohup. Đó là, danh sách phương pháp 2, trong số các quy trình khác , một số chương trình đang chạy với nohup.
Arcturus B

4
công việc không làm việc cho tôi, chỉ hoạt động cho một phiên ssh cùng, nếu tôi ngắt kết nối và kết nối lại nó không có danh sách còn được liệt kê trước đó chạy quá trình nohup
Mojimi

29

Thay vào đó nohup, bạn nên sử dụng screen. Nó đạt được kết quả tương tự - các lệnh của bạn đang chạy "tách rời". Tuy nhiên, bạn có thể tiếp tục các phiên màn hình và quay lại thiết bị đầu cuối "ẩn" của chúng và xem tiến trình gần đây bên trong thiết bị đầu cuối đó.

screencó rất nhiều lựa chọn. Tôi thường sử dụng những điều này:

Để bắt đầu phiên màn hình đầu tiên hoặc tiếp quản phiên màn hình gần đây nhất được tách ra:

screen -Rd 

Để tách khỏi phiên hiện tại: Ctrl+ACtrl+D

Bạn cũng có thể bắt đầu nhiều màn hình - đọc tài liệu.


6
Có vẻ là một sự thay thế tốt cho tôi. Tôi cũng phát hiện ra rằng tôi có thể tìm ra PID với "ps auwx"
Nils De Winter

7
Câu hỏi hỏi rõ ràng Có cách nào để lấy danh sách tất cả các chương trình mà tôi đã bắt đầu sử dụng "nohup" không? , nhưng câu trả lời này thậm chí không giải quyết được câu hỏi. Tại sao nó được chấp nhận?
Công viên Luke Joshua

3
Bởi vì trở lại năm 2013, đó là câu trả lời duy nhất có ích.
Nils De Winter

21

Nếu bạn có chuyển hướng đầu ra độc lập đến "nohup.out", chỉ cần xem ai sử dụng tệp này

lsof | grep nohup.out

1
Đó là một cách thông minh. Nhưng trong trường hợp của tôi, điều này không trả về kết quả. Mặc dù tôi chắc chắn rằng lệnh nohup vẫn đang chạy và nó đang sử dụng tệp nohup.out.
Julius Š.

1
Tất cả các TTY đều ổn, nhưng hãy hiển thị quy trình kép cho mỗi lần nohup!
Nabi KAZ

@ NabiK.AZ từ man lsof: "Nói chung, các luồng và nhiệm vụ kế thừa các tệp của trình gọi, nhưng có thể đóng một số và mở các tệp khác, vì vậy sẽ luôn báo cáo tất cả các tệp đang mở của luồng và tác vụ." Tôi không thể tìm thấy thông tin về nohup trong người đàn ông của nó, nhưng có vẻ như nó sử dụng hai chủ đề, không phải một.
Yaroslav Nikitenko

6

Bạn không thể nhận chính xác danh sách các lệnh được bắt đầu nohupnhưng bạn có thể thấy chúng cùng với các quy trình khác của mình bằng cách sử dụng lệnh ps x. Các lệnh bắt đầu bằng nohupsẽ có dấu chấm hỏi trong cột TTY.


3
"ps x" không giúp được gì, nhưng tôi phát hiện ra rằng "ps auxw" thì có.
Nils De Winter

5

Bạn cũng có thể chỉ sử dụng lệnh trên cùng và ID người dùng của bạn sẽ cho biết các công việc đang chạy và thời gian của chúng.

$ top

(điều này sẽ hiển thị tất cả các công việc đang chạy)

$ top -U [user ID]

(Điều này sẽ hiển thị các công việc cụ thể cho ID người dùng)


Thêm vào đó, điều tốt đẹp về việc này là nó sẽ nằm trên giao diện điều khiển của bạn, do đó bạn có thể xem công việc và biết khi nào nó kết thúc
rgilligan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.