Qual è la differenza tra il comando `Ctrl + C` e` kill -2` che invia un segnale usando?

Oct 24 2020

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

3 user414777 Oct 24 2020 at 00:41

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.