2012-03-06 28 views
6

Tôi đang triển khai syscall được gọi trong không gian người dùng, cho phép nói bằng foo. Syscall truy cập task_struct của foo (thông qua con trỏ toàn cục), in tên và pid của nó, sau đó tiếp tục quá trình cha mẹ của foo, cha mẹ của foo, vv. In tất cả tên và pids của họ lên và bao gồm cả quá trình init.Các id quá trình không âm trong Linux phải không?

Pid = 1 được dành riêng cho init, pid = 0 được dành riêng cho trình chuyển đổi.

Theo task_struct của trình swapper, đó là quy trình gốc của chính nó.

Swapper (hoặc lịch biểu) luôn có pid = 0 và luôn là quy trình cha mẹ của init?

Tất cả các pids đều không âm? Tôi có thể giả định điều đó không?

Trả lời

1

Luôn luôn là số dương hoặc 0. Nguồn hạt nhân xác định là pid_t loại, afaik được coi là chưa ký (mặc dù được xác định là đã ký để có thể thực hiện cuộc gọi như fork trả về âm số trong trường hợp lỗi).

+0

Cảm ơn tôi sẽ kiểm tra ngay lập tức cách xác định pid_t. – Plazo

+1

Tôi nghĩ rằng nó được ký, 'fork' trả về' pid_t' có thể là '-1'. Ngoài ra tôi nghĩ rằng tôi nhớ nhìn thấy nó trong một số tiêu đề. Cần kiểm tra. Ofc, điều này không có nghĩa là id quá trình có thể là số âm –

+0

Nó đã được ký, chỉ cần nhìn vào nó. Nhưng nó là như vậy để trở về lỗi: D –

0

Có, chúng thực sự luôn tích cực.

Bạn có thể xác minh điều này bằng một số cuộc gọi hệ thống POSIX, chẳng hạn như chờ đợi, sử dụng giá trị âm để biểu thị mọi thứ như tất cả các tiến trình con của bạn, hoặc tương tự, và chỉ giá trị dương đại diện cho PID hợp lệ.

Ví dụ: http://linux.die.net/man/2/wait

4

Để trả lời câu hỏi của bạn ngắn gọn hơn:

  • IBM Inside the Linux boot process mô tả quá trình swapper như quá trình có giá trị PID của 0. Lúc khởi động quá trình này chạy /sbin/init (hoặc quá trình khác do tham số của bộ tải khởi động), thường sẽ là quá trình với PID 1.
  • Trong các hệ thống Unix Các giá trị PID được phân bổ sequentially, bắt đầu từ quá trình đầu tiên và lên đến một giá trị tối đa specif ied by /proc/sys/kernel/pid_max. Vì vậy, bạn có thể an toàn đi theo giả thiết rằng tất cả các PID hợp lệ đều có giá trị dương, trong khi đó các giá trị âm phủ xuống đến các giá trị lỗi và như vậy.
  • Một ý tưởng hay cũng sẽ được tính cho các quy trình zombie, vì chúng có thể nhận được "xử lý đặc biệt" trong cây quá trình khi/nếu chúng được chấp nhận bởi init.
Các vấn đề liên quan