Jak funguje Ctrl + Z příkazovým řádkem, nikoli klávesnicí? [uzavřeno]
On 10 února, 2021 by adminKomentáře
- Zeptali jste se to již dříve na unix.stackexchange.com/questions/386200 , a s tímto duplikátem jste ve skutečnosti nevyjasnili věci, o jejichž objasnění lidé žádali.
- Není to skutečný duplikát. Tato otázka se týká Ctrl-Z, druhá se týká Ctrl-S, ale odpověď je ve skutečnosti stejná.
- Ne, druhá není není o Ctrl + S. Alespoň to je uvedeno v otázce.
Odpověď
Ovládání + Z zapíše řídicí znak susp
, který odešle signál SIGTSTP
(číslo 20 na Linuxu amd64, 24 na Solaris amd64, 18 na FreeBSD amd64 … je lepší vyhnout se odkazování na signály podle čísla, protože nejsou přenosné) pro všechny procesy ve skupině procesů v popředí terminálu.
Můžete odeslat signál k zastavení procesu z příkazového řádku pomocí kill
-příkazu.
kill -s STOP <pid>
(kde <pid>
je ID procesu, který chcete pozastavit), nebo pokud chcete adresovat všechny procesy programu pod určitým názvem (technicky všechny procesy, jejichž název odpovídá danému rozšířenému regulární výraz):
pkill -STOP xterm
(kde xterm
je příklad názvu).
Pokud potřebujete obnovit procesy, pošlete znaménko al SIGCONT
stejným způsobem.
Komentáře
- Odešle SIGTSTP (20 pro Linux na alespoň amd64), nikoli SIGSTOP, a do popředí procesu skupina koncového zařízení. SIGTSTP nelze zpracovat, nikoli SIGSTOP.
- ale jak zjistit počet relací, které terminál běží
- Jaký je význam
pid
? - @abuali " PID " je zkratka pro " ID procesu ". Viz en.wikipedia.org/wiki/Process_identifier
- @ St é phane Chazelas jak konw
process ID
speciální v terminálu otevřen
odpověď
Pokud byste chtěli zastavit všechny procesy, které mají /dev/pts/12
jako svůj řídicí terminál (včetně všech úloh v popředí a na pozadí spuštěných v tomto terminálu a prostředí), můžete udělat:
pkill -STOP -t pts/12
Tím by byl také pozastaven vedoucí relace. V některých případech může být ten automaticky obnoven. Například GNU screen
obnoví vedoucí relace, jakmile zjistí, že byla pozastavena.
Pokud jste chtěli odeslat signál SIGTSTP do procesu v popředí skupina tohoto terminálu jako ^Z
udělali byste:
kill -s TSTP -- "-$pgid"
Kde $pgid
je ID skupiny procesů této skupiny procesů v popředí. Na seznamech Linux a BSD můžete zjistit, o jaké procesy se jedná, spuštěním ps -o tpgid= -p "$pid"
kde $pid
je id libovolného procesu, který má tento terminál jako svůj řídicí terminál. Ve většině systémů jej může zjistit kterýkoli z těchto procesů pomocí tcgetpgrp()
.
V obou případech tyto procesy obnovíte odesláním signálu SIGCONT namísto SIGSTOP / SIGTSTP.
Odpověď
Odešlete signál STOP
procesům, které chcete pozastavit.
Později můžete odeslat signál k pozastavení pozastaveného procesu.
Například:
pkill -STOP terminal
Tím by byly pozastaveny všechny terminal
procesy.
pkill -CONT terminal
Tím by byly pozastaveny všechny procesy s názvem terminal
.
Komentáře
- ale jak zjistit počet relací, na kterých terminál běží
- @abuali I ' nejsem si jistý, co tím myslíš.
pkill
vyhledá všechny procesy odpovídající zadanému názvu a všem zašle signál. Pokud se chcete omezit na konkrétního uživatele, přidejte-u username
.
Napsat komentář