ฉันเพิ่งจะทำเช่นนี้ บนกองมากเกินผมตอบวิธีการหา PID ของกระบวนการที่ทำงานอยู่ในหน้าจอ เมื่อคุณมี PID คุณสามารถใช้ps
คำสั่ง นี่คือเนื้อหาของคำตอบนั้นพร้อมเนื้อหาเพิ่มเติมบางส่วนเพื่อแก้ไขสถานการณ์ของคุณ:
คุณสามารถรับ PID ของหน้าจอที่นี่ได้เช่น:
$ 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.
ให้เราสมมติว่าคุณต้องการให้ PID ของโปรแกรมทำงานใน Bash ในfoo_Monitor
เซสชันหน้าจอ ใช้ PID ของfoo_Monitor
เซสชันหน้าจอเพื่อรับ PID ของbash
เซสชันที่ใช้งานอยู่โดยค้นหา PPID (Parent PID) สำหรับ PID ที่รู้จัก:
$ 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
ตอนนี้รับค่า PID ของbash
เซสชั่น:
$ ps -el | grep 1814 | grep bash | awk '{print $4}'
1815
ตอนนี้เราต้องการกระบวนการที่มีที่ PID เพียงซ้อนคำสั่งและในเวลานี้ใช้การ-v
ตั้งค่าสถานะgrep bash
เพื่อรับกระบวนการที่ไม่ได้ถูกทุบตี:
$ echo $(ps -el | grep $(ps -el | grep 1814 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
23869
เราสามารถใช้ PID นั้นเพื่อค้นหาคำสั่ง (ดูที่ท้ายบรรทัดที่สอง):
$ 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
รวมทุกอย่างเข้าด้วยกัน:
$ ps u -p $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')