GNU/Linux >> Znalost Linux >  >> Linux

UNIX / Linux:3 způsoby odesílání signálu do procesů

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-^?;

Linux
  1. Linux – Init Process:Předchůdce všech procesů?

  2. 4 způsoby provádění skriptu Shell v systému UNIX / Linux

  3. Správa procesů v Ubuntu Linux

  1. 30 Cvičení procesů Linuxu pro systémové správce

  2. Linux – Může Ctrl+c odeslat signál Sigint více procesům?

  3. Základy signálů Linuxu – část I

  1. UNIX / Linux Procesy:C fork() Funkce

  2. Zpracování signálů UNIX/Linux:SIGEV_THREAD

  3. Kdy je setsid() užitečné nebo proč potřebujeme seskupovat procesy v Linuxu?