Hàm Perl Fork

Ham Perl Fork



fork() là một hàm tích hợp của Perl, được sử dụng để tạo một tiến trình con của bất kỳ tiến trình đang chạy nào và nó chỉ hoạt động trên hệ điều hành Linux. Nó tạo ra một bản sao riêng của tiến trình thực thi và chạy song song cả hai tiến trình. Vì vậy, nếu biến của tiến trình cha được cập nhật, nó sẽ không có bất kỳ ảnh hưởng nào đến biến tương tự của tiến trình con hoặc ngược lại. Việc sử dụng hàm fork() trong Perl được trình bày trong hướng dẫn này.

Cú pháp:

Cú pháp của hàm fork() được đưa ra như sau. Nó trả về một giá trị số hoặc “undef”. Nếu hàm fork() hoạt động thành công, một ID tiến trình cụ thể sẽ được trả về hoặc 0 được trả về cho tiến trình con. Nó trả về “undef” nếu hàm fork() không thành công.







nhận dạng hoặc ngã ba undef ( ) ;

Ví dụ 1: Sử dụng hàm Fork() đơn giản

Tạo một tệp Perl với tập lệnh sau để tạo một tiến trình con từ tiến trình hiện tại bằng cách sử dụng hàm fork(). ID tiến trình được in sau khi thực hiện hàm fork(). Các biến của tiến trình cha và tiến trình con được lưu trữ ở các vị trí bộ nhớ khác nhau. Vì vậy, nếu giá trị của biến được thay đổi trong tiến trình cha thì nó sẽ không tạo ra bất kỳ thay đổi nào đối với biến tương tự của tiến trình con hoặc ngược lại. Trong tập lệnh này, biến của tiến trình gốc được thay đổi. Sau đó, các biến của cả tiến trình cha và tiến trình con sẽ được in ra.



#!/usr/bin/perl

Sử dụng nghiêm ngặt ;
sử dụng cảnh báo ;
sử dụng 5.34.0 ;

#Khai báo một biến
$var của tôi = 'Nĩa thử nghiệm' ;
#Fork quy trình hiện tại
$process_id của tôi = cái nĩa ( ) ;

#Kiểm tra id tiến trình
nếu như ( $process_id < 0 )
{
nói 'Không thể rẽ nhánh quá trình.' ;
}
elsif ( $process_id == 0 )
{
nói 'Quy trình con:' ;
#In giá trị của biến của tiến trình con
nói 'Giá trị của biến: $var' ;
}
khác
{
nói 'Quy trình gốc: $process_id' ;
#Cập nhật giá trị của biến
$var = 'Nĩa thử nghiệm 2' ;
#In giá trị của biến của tiến trình cha
nói 'Giá trị của biến: $var' ;
}

Đầu ra:



Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Biến của tiến trình cha được sửa đổi với giá trị “Test Fork 2” nhưng biến của tiến trình con vẫn không thay đổi. Vì vậy, giá trị của biến của tiến trình con là “Test Fork”. Đó là giá trị sau ngã ba:





  p1

Ví dụ 2: Sử dụng hàm Fork() và Wait()

Tạo một tệp Perl với tập lệnh sau cho thấy cách sử dụng hàm fork() với hàm wait(). Ba biến được khai báo ở đầu tập lệnh. Hàm sleep() được sử dụng bên trong khối của tiến trình cha trong 1 giây và bên trong tiến trình con trong 2 giây. Tổng của hai biến được tính toán và lưu trữ trên một biến khác bên trong khối của tiến trình cha. Giá trị của hai biến được nhân lên và lưu trữ trên một biến khác bên trong tiến trình con. Hàm wait() được sử dụng ở cuối tập lệnh để chờ hoàn thành nhiệm vụ của một tiến trình trước khi bắt đầu nhiệm vụ của một tiến trình khác. Nếu hàm fork() được sử dụng nhiều lần trong tập lệnh và nhiều tiến trình đang chạy cùng lúc thì tình trạng bế tắc có thể phát sinh. Vấn đề có thể được giải quyết bằng hàm wait().



#!/usr/bin/perl

Sử dụng nghiêm ngặt ;
sử dụng cảnh báo ;
sử dụng 5.34.0 ;

#Khởi tạo các biến
$n1 của tôi = 10 ;
$n2 của tôi = 25 ;
kết quả $ của tôi = 0 ;

#Fork quy trình hiện tại
$process_id của tôi = cái nĩa ( ) ;

#Kiểm tra id tiến trình
nếu như ( $process_id == 0 )
{
#Tính phép nhân của các số
nói 'Quy trình con: $$' ;
kết quả $ = $n1 * $n2 ;
nói 'Đợi 2 giây... \N ' ;
ngủ 2 ;
nói 'Phép nhân của $n1 và $n2 là kết quả $.' ;
}
elsif ( $process_id > 0 )
{
#Tính tổng các số
nói 'Quy trình gốc: $$' ;
kết quả $ = $n1 + $n2 ;
nói 'Đợi 1 giây... \N ' ;
ngủ 1 ;
nói 'Tổng của $n1 và $n2 là kết quả $.' ;
}
khác
{
nói 'Không thể rẽ nhánh quá trình.' ;
}

#Chờ để hoàn thành nhiệm vụ xử lý
Chờ đợi ( ) ;

Đầu ra:

Đầu ra sau xuất hiện sau khi thực thi tập lệnh. Theo đầu ra, tiến trình con được tạo thành công, ID tiến trình của tiến trình cha được in và tập lệnh bị tạm dừng trong 1 giây để hoàn thành tác vụ. Tiếp theo, ID tiến trình của tiến trình con được in và tập lệnh bị tạm dừng trong 2 giây để hoàn thành tác vụ. Đầu ra của cả tiến trình cha và tiến trình con được in sau:

  p2

Phần kết luận

Mục đích của việc sử dụng hàm Perl fork() được trình bày trong hướng dẫn này bằng cách tạo một tiến trình con và thực hiện các loại tác vụ khác nhau bên trong khối của tiến trình cha và tiến trình con.