Domanda :Come posso inviare il segnale a un altro processo? Puoi spiegarmi tutte le opzioni disponibili per inviare segnali a un processo in ambiente UNIX/Linux?
Rispondi :puoi inviare vari segnali ai processi utilizzando uno dei metodi spiegati in questo articolo.
1. Invia segnale a un processo usando Kill
Usa il comando kill per inviare un segnale a un processo. Ad esempio, se desideri inviare il segnale USR1 al processo "a.out", procedi come segue.
$ ps -C a.out PID TTY TIME CMD 3699 pts/1 00:00:00 a.out $ kill -s USR1 3699
Nota :fai riferimento a 4 modi per uccidere un processo:kill, killall, pkill, xkill.
2. Invia segnale a un processo da un altro processo
È possibile utilizzare la chiamata di sistema UNIX kill (da un programma C) per inviare il segnale da un processo all'altro. Il seguente frammento di codice C mostra come utilizzare il comando kill.
La chiamata di sistema kill accetta due argomenti:1) il PID (id processo) del processo che deve essere segnalato 2) il segnale che deve essere inviato al processo. Il comando Kill restituisce 0 quando ha esito positivo.
int send_signal (int pid) { int ret; ret = kill(pid,SIGHUP); printf("ret : %d",ret); }
3. Invia segnale a un processo dalla tastiera
Quando un processo è in esecuzione sul terminale, è possibile inviare un segnale a quel processo dalla tastiera utilizzando una specifica combinazione di tasti. I seguenti sono un paio di esempi.
- SIGINT (Ctrl + C) – Lo sai già. Premendo Ctrl + C termina il processo in primo piano in esecuzione. Questo invia il SIGINT al processo per ucciderlo.
- Puoi inviare il segnale SIGQUIT a un processo premendo Ctrl + \ o Ctrl + Y
Puoi visualizzare le mappature dei tasti che inviano un segnale specifico a un processo utilizzando il comando "stty -a" come mostrato di seguito.
$ stty -a | grep intr intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;