Fungsi Perl Fork

Fungsi Perl Fork



Fork() ialah fungsi terbina dalam Perl yang digunakan untuk mencipta proses anak bagi sebarang proses yang sedang berjalan dan ia berfungsi pada sistem pengendalian Linux sahaja. Ia mencipta salinan berasingan proses pelaksanaan dan menjalankan kedua-dua proses secara selari. Jadi, jika pembolehubah proses induk dikemas kini, ia tidak akan memberi sebarang kesan pada pembolehubah proses anak yang sama atau sebaliknya. Penggunaan fungsi fork() dalam Perl ditunjukkan dalam tutorial ini.

Sintaks:

Sintaks fungsi fork() diberikan dalam perkara berikut. Ia mengembalikan nilai berangka atau 'undef'. Jika fungsi fork() berfungsi dengan jayanya, ID proses tertentu dikembalikan atau 0 dikembalikan untuk proses anak. Ia mengembalikan 'undef' jika fungsi fork() tidak berjaya.







ID atau garpu undef ( ) ;

Contoh 1: Penggunaan Mudah Fungsi Fork().

Cipta fail Perl dengan skrip berikut yang mencipta proses anak daripada proses semasa menggunakan fungsi fork(). ID proses dicetak selepas melaksanakan fungsi fork(). Pembolehubah proses induk dan anak disimpan di lokasi memori yang berbeza. Jadi, jika nilai pembolehubah diubah dalam proses induk, ia tidak akan membuat sebarang perubahan untuk pembolehubah yang sama proses anak atau sebaliknya. Dalam skrip ini, pembolehubah proses induk diubah. Kemudian, pembolehubah kedua-dua proses ibu bapa dan anak dicetak.



#!/usr/bin/perl

menggunakan ketat ;
guna amaran ;
gunakan 5.34.0 ;

#Istiharkan pembolehubah
$var saya = 'Test Fork' ;
#Bantu proses semasa
$process_id saya = garpu ( ) ;

#Semak id proses
jika ( $process_id < 0 )
{
katakan 'Tidak dapat menghentikan proses.' ;
}
elsif ( $process_id == 0 )
{
katakan 'Proses Kanak-kanak:' ;
#Cetak nilai pembolehubah proses anak
katakan 'Nilai pembolehubah: $var' ;
}
lain
{
katakan 'Proses Ibu Bapa: $process_id' ;
#Kemas kini nilai pembolehubah
$var = 'Uji Garpu 2' ;
#Cetak nilai pembolehubah proses induk
katakan 'Nilai pembolehubah: $var' ;
}

Pengeluaran:



Output berikut muncul selepas melaksanakan skrip. Pembolehubah proses induk diubah suai dengan nilai 'Test Fork 2' tetapi pembolehubah proses anak kekal tidak berubah. Jadi, nilai pembolehubah proses anak ialah 'Test Fork'. Itulah nilai selepas garpu:





  p1

Contoh 2: Menggunakan Fungsi Fork() dan Wait().

Cipta fail Perl dengan skrip berikut yang menunjukkan penggunaan fungsi fork() dengan fungsi wait(). Tiga pembolehubah diisytiharkan pada permulaan skrip. Fungsi sleep() digunakan di dalam blok proses induk selama 1 saat dan di dalam proses anak selama 2 saat. Jumlah kedua-dua pembolehubah dikira dan disimpan pada pembolehubah lain di dalam blok proses induk. Nilai dua pembolehubah didarab dan disimpan pada pembolehubah lain di dalam proses anak. Fungsi wait() digunakan pada penghujung skrip untuk menunggu untuk menyelesaikan tugas satu proses sebelum memulakan tugas proses lain. Jika fungsi fork() digunakan beberapa kali dalam skrip dan banyak proses berjalan pada masa yang sama, situasi kebuntuan mungkin timbul. Masalahnya boleh diselesaikan menggunakan fungsi wait().



#!/usr/bin/perl

menggunakan ketat ;
guna amaran ;
gunakan 5.34.0 ;

#Memulakan pembolehubah
$n1 saya = 10 ;
$n2 saya = 25 ;
$hasil saya = 0 ;

#Bantu proses semasa
$process_id saya = garpu ( ) ;

#Semak id proses
jika ( $process_id == 0 )
{
#Hitung pendaraban nombor
katakan 'Proses Kanak-kanak: $$' ;
$hasil = $n1 * $n2 ;
katakan 'Tunggu 2 saat... \n ' ;
tidur 2 ;
katakan 'Pendaraban $n1 dan $n2 ialah $hasil.' ;
}
elsif ( $process_id > 0 )
{
#Hitung hasil tambah nombor
katakan 'Proses Ibu Bapa: $$' ;
$hasil = $n1 + $n2 ;
katakan 'Tunggu 1 saat... \n ' ;
tidur 1 ;
katakan 'Jumlah $n1 dan $n2 ialah $hasil.' ;
}
lain
{
katakan 'Tidak dapat menghentikan proses.' ;
}

#Tunggu untuk menyelesaikan tugas proses
tunggu ( ) ;

Pengeluaran:

Output berikut muncul selepas melaksanakan skrip. Mengikut output, proses anak berjaya dibuat, ID proses proses induk dicetak, dan skrip dijeda selama 1 saat untuk menyelesaikan tugas. Seterusnya, ID proses proses anak dicetak dan skrip dijeda selama 2 saat untuk menyelesaikan tugasan. Output kedua-dua proses ibu bapa dan anak dicetak kemudian:

  p2

Kesimpulan

Tujuan menggunakan fungsi Perl fork() ditunjukkan dalam tutorial ini dengan mencipta proses anak dan melaksanakan pelbagai jenis tugas di dalam blok proses induk dan anak.