Tìm hiểu lệnh nào đang chạy trong một phiên màn hình


10

Tôi thường để các tác vụ chạy trong màn hình để tôi có thể kiểm tra chúng sau này, nhưng đôi khi tôi cần kiểm tra lệnh nào đang chạy trong màn hình. Nó thường là một tập lệnh php, chẳng hạn như

screen -d -m nice -n -10 php -f convertThread.php start=10000

Tôi không ghi lại màn hình nào đang chạy lệnh nào, nhưng tôi muốn có thể cảm nhận về tiến trình đã thực hiện bằng cách kiểm tra lệnh nào được chạy trong lệnh đó mà không làm hỏng quá trình.

Tôi không thấy bất kỳ tùy chọn nào cho việc này trong các trang trợ giúp màn hình.

Câu trả lời:


18

Gần đây tôi đã phải làm điều này. Trên Stack Overflow tôi đã trả lời làm thế nào để tìm ra PID của quá trình đang chạy trên màn hình . Một khi bạn có PID, bạn có thể sử dụng psđể nhận lệnh. Dưới đây là nội dung của câu trả lời đó với một số nội dung bổ sung để giải quyết tình huống của bạn:

Bạn có thể nhận được PID của các phiên màn hình ở đây như sau:

$ screen -ls
There are screens on:
        1934.foo_Server         (01/25/15 15:26:01)     (Detached)
        1876.foo_Webserver      (01/25/15 15:25:37)     (Detached)
        1814.foo_Monitor        (01/25/15 15:25:13)     (Detached)
3 Sockets in /var/run/screen/S-ubuntu.

Chúng ta hãy giả sử rằng bạn muốn PID của chương trình đang chạy trong Bash trong foo_Monitorphiên màn hình. Sử dụng PID của foo_Monitorphiên màn hình để có được PID của bashphiên chạy trong đó bằng cách tìm kiếm PPID (PID gốc) cho PID đã biết:

$ ps -el | grep 1814 | grep bash
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  1815  1814  0  80   0 -  5520 wait   pts/1    00:00:00 bash

Bây giờ chỉ nhận được PID của bashphiên:

$ ps -el | grep 1814 | grep bash | awk '{print $4}'
1815

Bây giờ chúng tôi muốn quá trình với PID đó . Chỉ cần lồng các lệnh và lần này sử dụng -vcờ trên grep bashđể có được quy trình không phải là bash:

$ echo $(ps -el | grep $(ps -el | grep 1814 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
23869

Chúng ta có thể sử dụng PID đó để tìm lệnh (Nhìn vào cuối dòng thứ hai):

$ ps u -p 23869
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
dotanco+ 18345 12.1 20.1 5258484 3307860 ?     Sl   Feb02 1147:09 /usr/lib/foo

Đặt nó tất cả cùng nhau:

$ ps u -p $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')

Ôi, thông minh! Tôi thích nó! Vì điều này trả lời trực tiếp câu hỏi, tôi sẽ chấp nhận câu trả lời này. Tôi rât cảm kich! Xin lỗi @Ghanima (: '
Austin Burk

7

Điều gì về việc sử dụng screen -S <your-fancy-name>để cung cấp cho các phiên màn hình tên có ý nghĩa theo các lệnh họ chạy? Tên sẽ được liệt kê cùng screen -lsvà được sử dụng để tiếp tục phiên screen -r <your-fancy-name>.

Chỉnh sửa để thêm:

Vì nó đã được chú ý vào ngày khác. tmuxcung cấp khá nhiều bộ chức năng giống như screen(nếu không thậm chí nhiều hơn) và đi kèm với một tính năng phù hợp với nhu cầu của bạn. Từ Câu hỏi thường gặp: "tmux hỗ trợ tự động đổi tên các cửa sổ thành ứng dụng đang chạy mà không cần hack tổng thể bằng các chuỗi thoát. Nó thậm chí còn được bật theo mặc định."

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.