Anda dapat membuat proses dengan berbagai cara di Perl.
Tutorial ini akan membahas beberapa metode pengelolaan proses.
Anda bisa mendapatkan ID proses menggunakan variabel khusus $$ atau $PROCESS_ID .
Hash %ENV menyimpan variabel lingkungan dalam proses induk, yaitu shell. Variabel ini dapat dimodifikasi di Perl.
exit() biasanya digunakan untuk keluar dari proses anak. Proses utama keluar setelah semua proses anak keluar.
Semua pegangan yang terbuka akan disalin oleh fungsi dup() di subrutin, dan semua pegangan yang ditutup oleh proses tidak akan mempengaruhi proses lainnya.
Perintah Unix dapat dengan mudah dijalankan menggunakan operator backtick. Anda dapat memasukkan beberapa perintah sederhana di backticks. Setelah perintah dijalankan, hasilnya akan dikembalikan:
#!/usr/bin/perl@files = `ls -l`;foreach $file (@files){ print $file;}1;
Dengan menjalankan program di atas, hasil keluarannya adalah sebagai berikut:
drwxr-xr-x 3 akar akar 4096 14 Sep 06:46 9-14drwxr-xr-x 4 akar akar 4096 13 Sep 07:54 android-rw-r--r-- 1 akar akar 574 17 Sep 15:16 indeks .htmdrwxr-xr-x 3 544 401 4096 6 Juli 16:49 MIME-Lite-3.01-rw-r--r-- 1 root root 71 17 Sep 15:16 test.pl……
Anda juga dapat menggunakan fungsi system() untuk menjalankan perintah Unix. Menjalankan perintah ini akan menampilkan hasilnya secara langsung. Secara default, ini akan dikirim ke tempat STDOUT Perl saat ini menunjuk, yang biasanya adalah layar. Anda juga dapat menggunakan operator pengalihan > untuk menghasilkan keluaran ke file tertentu:
Dengan mengeksekusi program di atas, hasil keluarannya adalah sebagai berikut:
drwxr-xr-x 3 akar akar 4096 14 Sep 06:46 9-14drwxr-xr-x 4 akar akar 4096 13 Sep 07:54 android-rw-r--r-- 1 akar akar 574 17 Sep 15:16 indeks .htmdrwxr-xr-x 3 544 401 4096 6 Juli 16:49 MIME-Lite-3.01-rw-r--r-- 1 root root 71 17 Sep 15:16 test.pl……
Anda perlu memperhatikan output dari perintah termasuk variabel lingkungan seperti $PATH atau $HOME, seperti yang ditunjukkan di bawah ini:
Dengan mengeksekusi program di atas, hasil keluarannya adalah sebagai berikut:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbinSaya adalah variabel Perl /usr/local/bin:/bin:/usr/bin:/ usr /local/sbin:/usr/sbin:/sbin
Fungsi Perl fork() digunakan untuk membuat proses baru.
Mengembalikan PID proses anak pada proses induk, dan 0 pada proses anak. Jika terjadi kesalahan (misalnya, memori tidak mencukupi), undef dikembalikan dan $! disetel ke pesan kesalahan yang sesuai.
fork dapat digunakan bersama dengan exec. Proses berakhir setelah fungsi exec menjalankan perintah dalam tanda kutip.
Dengan mengeksekusi program di atas, hasil keluarannya adalah sebagai berikut:
Output melalui proses induk Output melalui proses anak ID Proses selesai pada Minggu 19 Juni 2016 22:21:14 CST ID Proses: 47117
Jika proses keluar, ia akan mengirimkan sinyal CHLD ke proses induk dan itu akan menjadi proses zombie. Proses induk perlu menggunakan wait dan waitpid untuk menghentikannya. Tentu saja, Anda juga dapat menyetel $SIG{CHLD} ke IGNORG:
Dengan menjalankan program di atas, hasil keluarannya adalah sebagai berikut:
Output melalui proses induk Output melalui proses anak ID Proses selesai pada Minggu, 19 Juni 2016 22:30:56 CST ID Proses: -1
Perl kill('signal', (Process List)) mengirimkan sinyal ke sekelompok proses. sinyal adalah sinyal digital yang dikirim, 9 untuk mematikan proses.
Pertama mari kita lihat sinyal-sinyal yang umum digunakan di Linux, lihat daftarnya berikut ini:
Penjelasan nama sinyal dan anotasi nilainya—————————————————————————————————— ——————————— ———HUP 1 A Hang terdeteksi INT 2 A Interupsi dari keyboard QUIT 3 A Berhenti dari keyboard ILL 4 A Instruksi ilegal ABRT 6 C Kegagalan FPE 8 C Titik mengambang Abnormal KILL 9 Sinyal terminal AF USR1 10 A Sinyal yang ditentukan pengguna 1SEGV 11 C Akses memori ilegal USR2 12 A Sinyal yang ditentukan pengguna 2PIPE 13 A Tulis ke pipa ALRM tanpa pembaca 14 A Sinyal pengatur waktu TERM dari jam alarm 15 A Sinyal terminal CHLD 17 B Penghentian proses anak LANJUT 18 E Lanjutkan STOP jika dihentikan 19 DF Hentikan proses TSTP 20 D Ketik perintah stop TTIN pada tty 21 D Ketik TTOU pada tty proses background 22 D keluaran tty ke proses latar belakang
Contoh berikut mengirimkan sinyal SIGINT ke proses 104 dan 102: