Artikel Manajemen Sinyal dan Trap di Unix dan Linux menjelaskan bagaimana cara kerja sinyal dan Trap di Unix dan Linux
Artikel Manajemen Sinyal dan Trap di Unix dan Linux menjelaskan bagaimana cara kerja sinyal dan Trap di Unix dan Linux. Sinyal perangkat lunak interupsi yang dikirim ke sebuah program untuk menunjukkan bahwa sebuah peristiwa penting telah terjadi. Peristiwa dapat bervariasi dari permintaan pengguna untuk kesalahan akses memori ilegal. Beberapa sinyal, seperti sinyal interrupt, menunjukkan bahwa pengguna telah meminta program untuk melakukan sesuatu yang tidak dalam aliran biasa kontrol.
Berikut ini adalah beberapa sinyal yang lebih umum yang mungkin Anda temui dan ingin menggunakan dalam program Anda -
Nama
Sinyal
|
Nomor
Sinyal
| Deskripsi |
---|---|---|
SIGHUP | 1 | Berhenti ketika terdeteksi pada pengendalian terminal atau kematian proses pengendalian |
SIGINT | 2 | Dikeluarkan jika pengguna mengirimkan sinyal interrupt (Ctrl + C). |
SIGQUIT | 3 | Diberikan apabila pengguna mengirimkan sinyal berhenti(Ctrl + D). |
SIGFPE | 8 | Diberikan apabila operasi matematika ilegal dicoba |
SIGKILL | 9 | Jika proses mendapat sinyal ini harus berhenti segera dan tidak akan melakukan operasi bersih-bersih |
SIGALRM | 14 | sinyal alarm Jam (digunakan untuk timer) |
SIGTERM | 15 | Sinyal Software terminasi (dikirim oleh kill secara default). |
Daftar Sinyal fi unix dan linux
Ada cara mudah untuk menampilkan daftar semua sinyal didukung oleh sistem Anda. Hanya mengeluarkan perintah "kill -l" dan itu akan menampilkan semua sinyal yang didukung -
$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
Daftar sebenarnya sinyal bervariasi antara Solaris, HP-UX, dan Linux.
Default Actions
Setiap sinyal memiliki aksi standar yang terkait dengan itu. Tindakan default untuk sinyal adalah tindakan yang script atau program melakukan ketika menerima sinyal.
Beberapa tindakan kemungkinan default adalah -
- Mengakhiri proses.
- Mengabaikan sinyal.
- Dump core. Hal ini menciptakan sebuah file yang bernama core yang mengandung gambar memori dari proses ketika menerima sinyal.
- Menghentikan proses.
- Lanjutkan proses berhenti.
Mengirim Sinyal
Ada beberapa metode pengiriman sinyal ke program atau script. Salah satu yang paling umum adalah untuk pengguna untuk mengetik CONTROL-C atau tombol INTERRUPT sementara script mengeksekusi.
Ketika Anda menekan tombol Ctrl + C, SIGINT dikirim ke script dan sebagai script tindakan yang ditetapkan berakhir.
Metode umum lainnya untuk memberikan sinyal adalah dengan menggunakan perintah kill yang sintaks adalah sebagai berikut -
$ kill -signal pid
Berikut sinyal baik nomor atau nama dari sinyal untuk menyampaikan dan pid adalah ID proses yang sinyal harus dikirim ke. Sebagai Contoh -
$ kill -1 1001
Mengirimkan HUP atau sinyal hang-up ke program yang sedang berjalan dengan proses ID 1001. Untuk mengirim sinyal untuk membunuh proses yang sama menggunakan perintah berikut -
$ kill -9 1001
Ini akan membunuh proses yang berjalan dengan proses ID 1001.
Trapping Sinyal
Ketika Anda menekan Ctrl + C atau tombol break di terminal Anda selama eksekusi dari program shell, biasanya program yang segera dihentikan, dan command prompt Anda kembali. Ini mungkin tidak selalu diinginkan. Misalnya, Anda mungkin berakhir meninggalkan banyak file sementara yang tidak akan membersihkan diri.
Menjebak sinyal-sinyal ini cukup mudah, dan perintah trap memiliki sintaks berikut -
$ trap commands signals
Berikut perintah perintah Unix dan Linux, atau bahkan fungsi user-defined, dan sinyal dapat menjadi daftar sejumlah sinyal Anda ingin menjebak.
Ada dua penggunaan umum untuk perangkap dalam skrip shell -
- Membersihkan file sementara
- mengabaikan sinyal
Membersihkan File Temporary
Sebagai contoh perintah trap, berikut ini menunjukkan bagaimana Anda dapat menghapus beberapa file dan kemudian keluar jika seseorang mencoba untuk membatalkan program dari terminal -
$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2
Dari titik dalam program shell yang trap ini dijalankan, dua file work1$$ dan dataout$$ akan dihapus secara otomatis jika sinyal nomor 2 diterima oleh program.
Jadi jika pengguna menyela eksekusi program setelah trap ini dijalankan, Anda dapat yakin bahwa dua file ini akan dibersihkan. Perintah keluar yang mengikuti rm diperlukan karena tanpa itu eksekusi akan terus dalam program pada titik yang ia tinggalkan ketika sinyal tersebut diterima.
jumlah sinyal 1 dihasilkan untuk hangup: Entah seseorang sengaja menutup garis atau garis mendapatkan sengaja terputus.
Anda dapat memodifikasi trap sebelumnya juga menghapus dua file tertentu dalam hal ini dengan menambahkan jumlah sinyal 1 ke daftar sinyal -
$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2
Sekarang file-file ini akan dihapus jika garis akan menutup atau jika tombol Ctrl + C akan ditekan.
Perintah ditentukan untuk menjebak harus diapit tanda kutip jika mereka mengandung lebih dari satu perintah. Juga mencatat bahwa shell memindai baris perintah pada waktu itu perintah trap dijalankan dan juga lagi ketika salah satu sinyal yang tercantum diterima.
Jadi dalam contoh sebelumnya, nilai WORKDIR dan $$ akan diganti pada waktu itu perintah trap dijalankan. Jika Anda ingin substitusi ini terjadi pada saat yang baik sinyal 1 atau 2 diterima Anda dapat menempatkan perintah dalam tanda kutip tunggal -
$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2
Ignoring Signals
Jika perintah yang tercantum untuk perangkap adalah nol, sinyal yang ditentukan akan diabaikan saat diterima. Misalnya, perintah -
$ trap '' 2
Menentukan bahwa sinyal interupsi adalah untuk diabaikan. Anda mungkin ingin mengabaikan sinyal tertentu ketika melakukan beberapa operasi yang Anda tidak ingin terganggu. Anda dapat menentukan beberapa sinyal untuk diabaikan sebagai berikut -
$ trap '' 1 2 3 15
Perhatikan bahwa argumen pertama harus ditentukan untuk sinyal untuk diabaikan dan tidak sama dengan menulis berikut, yang memiliki arti yang terpisah sendiri -
$ trap 2
Jika Anda mengabaikan sinyal, semua subshells juga mengabaikan sinyal itu. Namun, jika Anda menentukan tindakan yang akan diambil pada penerimaan sinyal, semua subshells akan tetap mengambil tindakan default pada penerimaan sinyal itu.
Resetting Traps
Setelah Anda telah mengubah tindakan default akan diambil pada penerimaan sinyal, Anda dapat mengubahnya kembali lagi dengan trap jika Anda hanya menghilangkan argumen pertama; begitu.
$ trap 1 2
Tindakan reset harus diambil pada penerimaan sinyal 1 atau 2 kembali ke default.
COMMENTS