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_Monitor
phiên màn hình. Sử dụng PID của foo_Monitor
phiên màn hình để có được PID của bash
phiê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 bash
phiê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 -v
cờ 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}')