Otázka :Jak pošlu signál jinému procesu? Můžete mi vysvětlit všechny dostupné možnosti odesílání signálů procesu v prostředí UNIX / Linux?
Odpověď :Procesům můžete posílat různé signály pomocí jedné z metod vysvětlených v tomto článku.
1. Odeslat signál procesu pomocí Kill
Použijte příkaz kill k odeslání signálu procesu. Pokud například chcete odeslat signál USR1 procesu „a.out“, proveďte následující.
$ ps -C a.out PID TTY TIME CMD 3699 pts/1 00:00:00 a.out $ kill -s USR1 3699
Poznámka :Viz 4 způsoby, jak zabít proces – kill, killall, pkill, xkill.
2. Odeslat signál procesu z jiného procesu
K odeslání signálu z jednoho procesu do druhého můžete použít UNIX system call kill (z programu C). Následující fragment kódu C ukazuje, jak používat příkaz kill.
Systémové volání Kill má dva argumenty:1) PID (process id) procesu, který má být signalizován, 2) signál, který je třeba odeslat procesu. Příkaz Kill vrátí 0, když je úspěšný.
int send_signal (int pid) { int ret; ret = kill(pid,SIGHUP); printf("ret : %d",ret); }
3. Odeslat signál do procesu z klávesnice
Když na terminálu běží proces, můžete tomuto procesu poslat signál z klávesnice pomocí určité specifické kombinace kláves. Následuje několik příkladů.
- SIGINT (Ctrl + C) – To už znáte. Stisknutí Ctrl + C ukončí běžící proces v popředí. To odešle SIGINT procesu, aby ho zabil.
- Signál SIGQUIT můžete procesu odeslat stisknutím Ctrl + \ nebo Ctrl + Y
Mapování klíčů, které odesílá konkrétní signál procesu, si můžete prohlédnout pomocí příkazu „stty -a“, jak je uvedeno níže.
$ stty -a | grep intr intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;