Gọi hàm getpid trong C với các ví dụ

Calling Getpid Function C With Examples



Getpid () là hàm dùng để lấy ID tiến trình của tiến trình gọi hàm đó. PID cho quy trình ban đầu là 1, sau đó mỗi quy trình mới được gán một Id mới. Đây là một cách tiếp cận đơn giản để lấy PID. Chức năng này chỉ giúp bạn nhận được các id quy trình duy nhất.

Các hàm được sử dụng để lấy id

Có hai loại ID hiện diện ở đây. Một là id hiện tại của quá trình PID. Trong khi cái kia là id của PPID quy trình mẹ. Cả hai hàm này đều là các hàm dựng sẵn được định nghĩa trong thư viện. Trong khi chạy mã mà không sử dụng thư viện này có thể gây ra lỗi và ngừng thực thi.







hàm getpid () trong C

Khi một số tiến trình được hình thành và đang chạy, một id duy nhất sẽ được gán cho nó. Đây là id quy trình. Hàm này giúp trả về id của tiến trình hiện đang được gọi.



hàm getppid () trong C

Id này hữu ích trong việc trả về tiến trình của hàm / tiến trình mẹ.



ví dụ 1
Để hiểu ví dụ về PID trong quy trình bằng ngôn ngữ C. Bạn cần hai công cụ: bất kỳ trình soạn thảo văn bản nào và thiết bị đầu cuối Linux, trên đó bạn phải chạy các lệnh. Tạo một tệp trong bất kỳ trình soạn thảo văn bản nào. Chúng tôi đã tạo một tên tệp code1.c vì mã được viết bằng ngôn ngữ C, vì vậy nó sẽ được lưu với phần mở rộng .c.





Chúng tôi đã thêm một thư viện duy nhất. Sau đó, ở đây bắt đầu chương trình chính. Trong chương trình chính, chúng ta gọi hàm dựng sẵn getpid (); để tìm nạp id của quy trình hiện tại. Và một biến được giới thiệu và gán. Để giá trị của hàm PID () được lưu trữ trong biến này, sau đó chúng ta sẽ in ra giá trị bằng cách sử dụng biến này.



Bây giờ chúng tôi muốn chạy nội dung của tệp này trong thiết bị đầu cuối Linux. Điều kiện tiên quyết của mã là phải được biên dịch trước rồi mới thực thi. Để biên dịch, GCC được sử dụng. Nếu hệ thống của bạn thiếu GCC, thì trước tiên bạn cần cài đặt nó bằng cách sử dụng lệnh Sudo.

Bây giờ biên dịch mã đã viết. Điều này có thể được thực hiện bằng cách sử dụng lệnh sau.

$ GCC –o code1 code1.c

Trong khi –o được sử dụng để mở tệp lưu trong lệnh. Sau đó, sau –o, chúng tôi viết tên tệp.

Sau khi biên dịch, hãy chạy lệnh.

$ ./code1

Hình ảnh trên hiển thị id tiến trình của hàm.

Ví dụ 2
Trong ví dụ trước, chúng tôi sử dụng PID. Nhưng trong ví dụ này, cả PID và PPID đều được sử dụng. Mã nguồn cho chức năng này gần giống như mã nguồn trước đó. Chỉ có một bổ sung khác của một ID.

Hãy xem xét một tệp chứa hai biến trong chương trình chính được gán bởi các ID quy trình. Một là của quy trình hiện tại, và một là của quy trình mẹ. Sau đó, tương tự như ví dụ đầu tiên, in cả hai id thông qua các biến của chúng.

Int pid_t = getpid ();
Int ppid_t = getppid ();

Đây là hai chức năng chính của toàn bộ mã. Bây giờ, sau khi tạo tệp, bước tiếp theo là biên dịch và chạy tệp. Biên dịch bằng cách sử dụng GCC trong lệnh. Sau khi biên dịch, sau đó chạy nó trên thiết bị đầu cuối của Ubuntu.

$ GCC –o code1 code1.c
$ ./code1

Đầu ra cho thấy rằng id quy trình được hiển thị đầu tiên, sau đó id quy trình mẹ được hiển thị.

Ví dụ 3
Tất cả các quá trình chạy và thực thi theo cách song song. Tiến trình cha và con thực hiện chung tất cả các dòng còn lại. Cả hai đều cho kết quả tại một thời điểm. Nhưng bằng cách sử dụng một ngã ba trong mã C, nếu hàm này trả về giá trị nhỏ hơn 0, điều đó có nghĩa là lệnh gọi hàm đã kết thúc.

Hãy xem xét một tệp mới có hai thư viện trong tiêu đề tương ứng. Ở đây, một điều kiện được sử dụng trong đó chúng tôi đã sử dụng câu lệnh if-else. Trong chương trình chính, có nêu rằng nếu giá trị fork ở giá trị –ive, nó sẽ hiển thị thông báo rằng id của quy trình bị lỗi và sẽ không lấy được. Nếu tình huống là sai, thì trình biên dịch sẽ chuyển sang phần khác của điều kiện. Trong phần này, id quy trình được lấy, sau đó chúng tôi sẽ hiển thị ID quy trình này và hiển thị thông báo rằng ID quy trình đã được lấy. Ở đây chúng tôi sẽ trích dẫn câu lệnh if-else của mã nguồn.

Bây giờ một lần nữa, hãy biên dịch mã và sau đó chạy nó.

./code2

Đầu ra cho thấy rằng phần khác đã được thực thi và sẽ in id quy trình và sau đó hiển thị thông báo PID.

Ví dụ 4

Đây là một ví dụ khác về việc giải thích khái niệm tương tự. Hàm Fork () trả về hai giá trị khác nhau. Trong trường hợp của một tiến trình con, giá trị là 0, giá trị này sẽ được trả về. Đồng thời, giá trị trong trường hợp của tiến trình mẹ là ID tiến trình của con mới.

Trong ví dụ này, điều kiện if_else tương tự cũng được sử dụng. Nhưng ở đây, hai điều kiện được áp dụng. So sánh PID nhỏ hơn 0 và PID kia bằng 0. Nếu PID nhỏ hơn 0, thì nó sẽ hiển thị thông báo lỗi. Trong khi nếu PID bằng 0, điều đó có nghĩa là nó là một quy trình con và phần khác cho thấy rằng nếu PID lớn hơn 0, nó là một quy trình mẹ.

Bây giờ biên dịch và chạy mã.

$ gcc –o code3 code3.c
$. / code3

Từ đầu ra, chúng ta có thể thấy rằng phần khác được in đầu tiên có nghĩa là ID quy trình lớn hơn 0.

Ví dụ 5
Được rồi, đây là ví dụ cuối cùng trong đó chúng tôi đã cố gắng tổng hợp tất cả các mã được mô tả ở trên để giải thích hoạt động của hàm này. Chúng ta cũng có thể sử dụng các vòng lặp với các hàm fork () để sử dụng các hàm getpid (). Chúng ta có thể sử dụng các vòng lặp để tạo ra nhiều tiến trình con. Ở đây chúng ta phải sử dụng giá trị của 3 trong vòng lặp.

Một lần nữa chúng ta phải sử dụng câu lệnh điều kiện trong mã. Vòng lặp for bắt đầu từ vòng lặp một và lặp lại cho đến vòng lặp thứ 3rdxoay.

Bây giờ hãy lưu tệp và thực thi nó. Có một phương pháp đơn giản khác để biên dịch và thực thi mã chỉ trong một lệnh duy nhất. Đó là.

$ GCC mã5.c –o s & ./code5

Bây giờ đang chuyển sang đầu ra của mã. Id của tiến trình mẹ giống hệt nhau trong tất cả các tiến trình con. Điều này có nghĩa là tất cả các quy trình này thuộc về một phụ huynh. Các quy trình này được thực hiện lần lượt sau khi vòng lặp được giới hạn ở 3. Chỉ 3 lần lặp sẽ được thực hiện.

Phần kết luận

Bài viết này chứa kiến ​​thức cơ bản và cách hoạt động của hàm getPID () trong các lệnh Linux. Id duy nhất được gán cho mỗi quá trình thông qua chức năng này.