Qual è la differenza tra il comando `Ctrl + C` e` kill -2` che invia un segnale usando?
Ad esempio, mentre sto eseguendo lo script seguente, se invio un segnale INT con Ctrl + C , il file di script viene interrotto immediatamente. Ma quando provo lo stesso processo con il comando kill di kill -2 pid, il sleepcomando dovrebbe finire affinché il segnale di interrupt sia valido. Qual è esattamente la ragione di questa situazione?
#!/bin/bash
trap 'echo signal received!!' SIGINT
echo "The script pid is $$"
sleep 30
Risposte
La differenza è che quando premi Ctrl-Cil kernel invierà un SIGINTsegnale sia al tuo script che al sleepcomando (cioè invierà il segnale all'intero gruppo del processo ), ma con la kill -INT $pidsegnalazione $pid(presumibilmente il tuo script).
Supponendo che lo script viene avviato da un tipico shell interattiva (cioè la sceneggiatura è il leader del gruppo di processo), solo negando il pid dovrebbe funzionare: kill -INT -$pid.