2009-10-06 31 views
17

Tôi đã thử google, nhưng đã tìm thấy getppid() nhận được pid gốc của quy trình hiện tại.linux: lập trình có được pid cha của một quá trình khác?

Tôi cần một cái gì đó như getppid(some_other_pid), là có một điều như vậy? Về cơ bản có pid của một số quá trình và trả về quá trình cha mẹ 'pid.

+1

Hãy xem cuộc gọi hệ thống sysctl() và liên kết này. http://www.objectpark.net/parentpid.html – vpram86

+1

@Aviator, tại sao nhận xét và không phải là câu trả lời? – hasen

Trả lời

22

Tôi nghĩ điều đơn giản nhất là mở "/ proc" và phân tích cú pháp nội dung.

Bạn sẽ tìm thấy ppid như tham số thứ 4 của/proc/pid/stat

+0

, phần nào của '/ proc/ /' giữ giá trị gốc? – hasen

+5

Tham số 4 en/proc/pid/stat –

+0

Aha, tuyệt vời! Bạn có thể chỉnh sửa câu trả lời để thêm câu trả lời vào nó không? – hasen

2

Bạn có thể có một cái nhìn tại sysctl() gọi hệ thống và this liên kết.

+0

Cố gắng "mù gấp", không chắc tại sao nó không được biên dịch hoàn toàn. nó chỉ dành cho OS X? Nó có hoạt động trên Linux không? – hasen

+0

Nó sẽ chỉ hoạt động đối với BSD và OS X .. – vpram86

+0

bạn nên tạo một siêu liên kết thân thiện hơn. https://www.w3.org/QA/Tips/noClickHere – Jeff

10

hoặc từ một unix shell bạn có thể thử ps -p <child_pid> -o ppid=

+0

Câu trả lời đơn giản tuyệt vời. Đối với lệnh bạn có thể sao chép/dán để xem nó hoạt động thử ** 'ps -p $$ -o ppid =' **. $$ là ID tiến trình hiện tại. – Jess

0

thêm một cách để có được nó từ entry proc:

cat /proc/<pid>/status | grep PPid: 
3

tôi 7 năm muộn để đảng nhưng đối với bất cứ ai có thể vấp ngã này câu hỏi, đây là giải pháp thay thế trên OS X. Câu trả lời khác được đăng ở đây là chính xác và sysctl() sẽ thực hiện công việc, nhưng bạn cũng có thể sử dụng proc_pidinfo để nhận được nhiều thông tin hữu ích về quy trình.

#include <libproc.h> 

int getppid(const pid_t pid) 
{ 
    proc_bsdinfo info; 
    proc_pidinfo(pid, PROC_PIDTBSDINFO, 0, &info, sizeof(info)); 
    return info.pbi_ppid; 
} 

Rõ ràng, việc kiểm tra lỗi bổ sung là bắt buộc.

Các vấn đề liên quan