Trong hầu hết các trường hợp, chỉ cần chạy ps
thường là đủ, cùng với các cờ yêu thích của bạn để cho phép đầu ra rộng. Tôi nghiêng về phía ps -feww
, nhưng những gợi ý khác ở đây sẽ hoạt động. Lưu ý rằng nếu một chương trình được bắt đầu từ một ai đó $PATH
, bạn sẽ chỉ thấy tên thực thi, không phải là đường dẫn đầy đủ. Ví dụ: thử điều này:
$ 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
Điều quan trọng cần lưu ý là thông tin hiển thị trong ps
có thể được ghi đè hoàn toàn bởi chương trình đang chạy. Ví dụ: mã này:
int main (int argc, char **argv) {
memset(argv[0], ' ', strlen(argv[0]));
strcpy(argv[0], "foobar");
sleep(30);
return(0);
}
Nếu tôi biên dịch nó thành một tệp có tên là "myprogram" và chạy nó:
$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201
Và sau đó chạy ps
, tôi sẽ thấy một tên quy trình khác:
$ ps -f -p 10201
UID PID PPID C STIME TTY TIME CMD
lars 10201 9734 0 11:37 pts/10 00:00:00 foobar
Bạn cũng có thể nhìn trực tiếp vào /proc/<pid>/exe
, đây có thể là một liên kết tượng trưng để thực thi thích hợp. Trong ví dụ trên, điều này cung cấp cho bạn thông tin hữu ích hơn nhiều so với ps
:
$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb 8 11:31 /proc/9600/exe -> /usr/bin/lftp
/proc
sẽ cung cấp tất cả thông tin về một chương trình,exe
sẽ là một liên kết đến thực thi,cwd
thư mục làm việc hiện tại,fd
thư mục chứa các liên kết đến các tệp đang mở (bao gồm đầu vào tiêu chuẩn, đầu ra và lỗi tiêu chuẩn)