ในกรณีส่วนใหญ่เพียงแค่เรียกใช้ps
มักจะเพียงพอพร้อมกับธงที่คุณชื่นชอบเพื่อเปิดใช้งานการส่งออกกว้าง ฉันเอนไปทางps -feww
แต่คำแนะนำอื่น ๆ ที่นี่จะใช้ได้ โปรดทราบว่าหากโปรแกรมเริ่มต้นจากบางคน$PATH
คุณจะเห็นชื่อที่สามารถใช้งานได้เท่านั้นไม่ใช่เส้นทางแบบเต็ม ตัวอย่างเช่นลองสิ่งนี้:
$ lftp &
$ ps -feww | grep ftp
lars 9600 9504 0 11:30 pts/10 00:00:00 lftp
lars 9620 9504 0 11:31 pts/10 00:00:00 grep ftp
เป็นสิ่งสำคัญที่จะต้องทราบว่าข้อมูลที่ปรากฏในps
สามารถเขียนทับได้อย่างสมบูรณ์โดยโปรแกรมที่กำลังทำงานอยู่ ตัวอย่างเช่นรหัสนี้:
int main (int argc, char **argv) {
memset(argv[0], ' ', strlen(argv[0]));
strcpy(argv[0], "foobar");
sleep(30);
return(0);
}
ถ้าฉันรวบรวมมันเป็นไฟล์ที่เรียกว่า "myprogram" และเรียกใช้:
$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201
จากนั้นเรียกใช้ps
ฉันจะเห็นชื่อกระบวนการอื่น:
$ ps -f -p 10201
UID PID PPID C STIME TTY TIME CMD
lars 10201 9734 0 11:37 pts/10 00:00:00 foobar
นอกจากนี้คุณยังสามารถดูได้โดยตรง/proc/<pid>/exe
ซึ่งอาจเป็นลิงค์ไปยังปฏิบัติการที่เหมาะสม ในตัวอย่างด้านบนสิ่งนี้ให้ข้อมูลที่เป็นประโยชน์มากกว่าps
:
$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb 8 11:31 /proc/9600/exe -> /usr/bin/lftp
/proc
จะให้ข้อมูลทั้งหมดเกี่ยวกับโปรแกรมexe
จะเป็นลิงค์ไปยังปฏิบัติการcwd
ไดเรกทอรีไดเรกทอรีทำงานปัจจุบันfd
มีลิงค์ไปยังไฟล์ที่เปิด (รวมถึงการป้อนข้อมูลมาตรฐานเอาท์พุทและข้อผิดพลาดมาตรฐาน)