2012-08-11 23 views

Trả lời

15

Khi chức năng đọc của bạn đang thực thi, nó làm như vậy trong ngữ cảnh của quá trình đã phát ra cuộc gọi hệ thống. Do đó, bạn có thể sử dụng current, tức là current->pid.

+0

hiện tại là gì? đọc không nhận được hiện tại làm đối số ... ssize_t (* đọc) (struct file *, char __user *, size_t, loff_t *); – 0x90

+2

@ 0x90 Đó là một macro. – cnicutar

+0

http://kernelnewbies.org/FAQ/current, phải không? – 0x90

7

Những ngày này, chúng tôi có một số chức năng trợ giúp được xác định trong lịch biểu.h. Trong trường hợp pid, bạn có thể sử dụng:

pid = task_pid_nr(current); 

để nhận được nhiệm vụ hiện tại.

đây là nhận xét được lấy từ include/linux/sched.h từ v3.8.

sự giúp đỡ để có được PID khác nhau của công việc khi họ được nhìn thấy từ không gian tên khác nhau

  • task_xid_nr(): id toàn cầu, ví dụ: id nhìn thấy từ không gian tên init;
  • task_xid_vnr(): id ảo, tức là id được xem từ không gian tên pid hiện tại.
  • task_xid_nr_ns(): id được nhìn thấy từ ns được chỉ định;
  • set_task_vxid(): gán một id ảo cho một tác vụ;

xem thêm pid_nr() vv trong bao gồm/linux/pid.h

2

Trên một kernel 2.6.39 tay xây dựng, nếu current->pid không hoạt động sau đó nó có thể được thực hiện bằng cách:

pid_nr(get_task_pid(current, PIDTYPE_PID)) 

Có thể thay thế PIDTYPE_PID bằng PIDTYPE_PGID hoặc PIDTYPE_SID. Nguồn tiêu đề là include/linux/pid.h khi Yasushi chỉ ra.

Cách tiếp cận nào hoạt động phụ thuộc vào tệp tiêu đề mà mã sử dụng.

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