Pemrograman C

Sinyal POSIX dengan Pemrograman C

Sinyal POSIX dengan Pemrograman C
Kami dapat mendefinisikan sinyal sebagai aktivitas yang dipicu untuk memperingatkan operasi atau utas kapan pun waktu kedatangan untuk situasi signifikan tertentu. Setiap kali prosedur atau utas mengakui sinyal, prosedur atau utas akan menghentikan apa pun yang dilakukannya dan mengambil tindakan segera. Dalam koordinasi antar-proses, sinyal bisa efektif. Dalam panduan ini, Anda akan mempelajari penangan sinyal di Linux melalui bahasa C.

Sinyal Standar atau Reguler:

File header 'sinyal.h' memiliki sinyal yang ditentukan di dalamnya sebagai konstanta makro. Judul sinyal dimulai dengan "SIG" dan didahului dengan gambaran singkat tentang sinyal. Akibatnya, sinyal apa pun memang memiliki nilai numerik yang berbeda. Kode program harus menggunakan nama sinyal, bukan beberapa sinyal. Penyebab di baliknya adalah jumlah sinyal dapat bervariasi tergantung pada sistem, tetapi interpretasi nama adalah standar. Di bawah ini adalah beberapa sinyal reguler dengan fungsinya yang ditentukan.

DAFTAR:

Sinyal ini akan menghentikan pemrosesan. Sinyal SIGHUP dimatikan untuk menunjukkan disasosiasi terminal pengguna, kemungkinan karena komunikasi jarak jauh terputus atau terputus.

TANDA TANGAN:

Itu akan mengganggu proses. Sinyal SIGINT diterima setiap kali pengguna memasukkan kunci INTR (biasanya Ctrl + C).

SIGQUIT:

Ini akan menghentikan atau keluar dari pemrosesan. Sinyal SIGQUIT diterima setiap kali pengguna memasukkan tombol QUIT (biasanya Ctrl + \).

SIGILL:

Ini berjalan ketika perintah terlarang telah dibuat. Sinyal SIGILL dibuat setiap kali ada upaya untuk melakukan perintah sampah atau hak istimewa. Setiap kali tumpukan meluap dan mesin memiliki masalah menjalankan pengontrol sinyal, SIGILL juga dapat dibuat.

SIGTRAP:

Ini dipanggil ketika beberapa instruksi perangkap jejak sedang dieksekusi. Sinyal SIGTRAP dibuat oleh perintah breakpoint dan perintah trap lainnya. Debugger menggunakan sinyal seperti itu.

SIGABRT:

Ini disebut sinyal Abort. Sinyal SIGABRT dibuat dengan memanggil metode abort(). Sinyal seperti itu digunakan untuk menunjukkan ketidakakuratan yang diamati oleh kode yang disebutkan di atas dan direkam oleh pemanggilan metode abort().

SIGFPE:

Pengecualian untuk floating-point; Sinyal SIGFPE dihasilkan ketika kesalahan matematis bencana terjadi.

SIGUSR1 dan SIGUSR2:

Sinyal SIGUSR1 dan SIGUSR2 dapat digunakan sesuai keinginan Anda. Sangat bermanfaat untuk interaksi antarproses yang mudah untuk membuat penangan sinyal untuk sinyal tersebut dalam aplikasi yang mendapatkan sinyal.

Perilaku Default Sinyal:

Ada perilaku atau tindakan standar per setiap sinyal, dan dimungkinkan untuk menyesuaikan perilaku default menggunakan fungsi handler. Perilaku sinyal SIGKILL dan SIGABRT otomatis tidak dapat diubah atau diabaikan.

Istilah: Ini akan menghentikan operasi.

Inti: Dokumen dump inti akan dibuat, dan operasi akan dihentikan.

tanda: Prosesnya akan mengabaikan sinyal.

Berhenti: Itu akan menghentikan operasinya.

Lanjutan: Operasi akan dipertahankan agar tidak dihentikan.

Penanganan Sinyal:

Proses memiliki preferensi perilaku untuk sinyal ketika diakui. Prosesnya mungkin berperilaku seperti berikut:

Sinyal secara otomatis diberhentikan ketika perilaku sinyal yang ditentukan diabaikan.

Menggunakan metode seperti sinyal atau sigaction, kode dapat mendaftarkan fungsi handler. Ini disebut menangkap sinyal dari handler.

Jika sinyal tidak dirawat atau diabaikan, tindakan standar dapat terjadi.

Anda dapat mendefinisikan fungsi Penanganan Sinyal sebagai:

$ Sinyal int () tanda int, batal (*funk)(int))

Ketika pemrosesan memperoleh sinyal signum, metode signal() dapat memanggil metode 'func'. Signal() mengembalikan pointer ke metode 'func' jika berhasil atau pengecualian dikembalikan ke errno dan -1 sebagai gantinya.

Pointer 'func' mampu memiliki tiga nilai:

SIG_DFL: Ini adalah penunjuk ke metode SIG DFL() standar, yang didefinisikan di header.h dokumen yang digunakan untuk mendapatkan perilaku standar sinyal.

SIG_IGN: Ini adalah referensi ke metode abaikan SIG IGN(), yang ditentukan di header.h dokumen.

Penunjuk metode penangan yang ditentukan pengguna: Jenis metode handler yang ditentukan pengguna void(*)(int), menyiratkan bahwa kategori kembali adalah batal dan argumen soliter adalah int.

Buat 'sinyal' file baru.c' dan tulis kode penangan sinyal di bawah ini di dalamnya.

Hubungkan sinyal.c file dengan gcc.

Saat menjalankan sinyal.c, kami memiliki loop tanpa akhir yang dilakukan dalam metode utama. Saat menekan CTRL+C, itu memulai metode handler, dan eksekusi metode utama berhenti. Pemrosesan metode utama berlanjut setelah pencapaian metode handler. Setelah menekan Ctrl+\, operasi berhenti.

Abaikan Sinyal:

Untuk mengabaikan sinyal, buat file 'sinyal.c' dan tulis kode di bawahnya di dalamnya.

Ikat abaikan.c file dengan gcc.

Jalankan sinyal.file c. Ketuk CTRL+C, sinyal SIGNIT dibuat; namun, perilaku tersebut tidak diperhatikan karena metode handler disebutkan ke metode SIG_IGN()().

Daftarkan Ulang Penangan Sinyal:

Untuk mendaftarkan ulang penangan sinyal, buat file baru 'register.c' dan tuliskan kode di bawah ini di dalamnya:

Kaitkan rereg.c file dengan gcc.

Jalankan rereg.file c. Saat pertama kali menekan CTRL+C metode handler dinaikkan, dan handler sinyal didaftarkan ulang ke SIG_DFL. Sambil menekan CTRL+C lagi, eksekusi dihentikan.

Kirim Sinyal Menggunakan Raise():

Buat file 'kirim.c' dan tambahkan kode di bawah ini. Untuk mengirim sinyal ke metode pemanggilan, metode raise() digunakan.

Kaitkan pengiriman.c file dengan gcc.

Proses menggunakan metode raise() untuk mengirimkan sinyal SIGUSR1 sendiri.

Kirim Sinyal Menggunakan Kill():

Tambahkan kode di bawah ini di 'raise.c'. Gunakan metode kill() untuk mengirim sinyal ke grup proses.

Tautkan kenaikan gaji.c file dengan gcc.

Dengan menggunakan metode kill(), proses mengarahkan sinyal SIGUSR1 ke yang disebutkan di atas.

Interaksi Orangtua-Anak:

Untuk melihat interaksi orang tua-anak, tulis kode di bawah ini dalam sebuah file.

Ikatan com.c file dengan gcc.

Metode Fork()/ menghasilkan anak, mengembalikan nol ke proses anak, dan ID anak ke induk.

Kesimpulan:

Dalam panduan ini, kita telah melihat cara membuat, menangani, mengirim, mengabaikan, mendaftar ulang, dan menggunakan sinyal untuk interaksi antar-proses di Linux.

Ulasan Mouse Nirkabel Microsoft Sculpt Touch
Saya baru-baru ini membaca tentang Microsoft Sculpt Touch mouse nirkabel dan memutuskan untuk membelinya. Setelah menggunakannya untuk sementara waktu...
Trackpad dan Mouse Pointer di Layar AppyMouse untuk Tablet Windows
Pengguna tablet sering melewatkan penunjuk mouse, terutama ketika mereka terbiasa menggunakan laptop. Layar sentuh Smartphone dan tablet hadir dengan ...
Tombol tengah mouse tidak berfungsi di Windows 10
Itu tombol tengah mouse membantu Anda menelusuri halaman web dan layar yang panjang dengan banyak data. Jika itu berhenti, Anda akhirnya akan mengguna...