Como funciona o Ctrl + Z pela linha de comando e não pela tecla do teclado? [fechado]
On Fevereiro 10, 2021 by adminComentários
- Você perguntou isso antes em unix.stackexchange.com/questions/386200 , e com esta duplicata você não deixou realmente claro as coisas que as pessoas pediram que fossem esclarecidas.
- Não é uma duplicata verdadeira. Esta pergunta é sobre Ctrl-Z, a outra é sobre Ctrl-S, mas a resposta é realmente a mesma.
- Não, a outra não é sobre Ctrl + S. Pelo menos isso é declarado na pergunta.
Resposta
Controle + Z escreve o caractere de controle susp
, que envia o sinal SIGTSTP
(número 20 no Linux amd64, 24 em Solaris amd64, 18 no FreeBSD amd64 … é melhor evitar referir-se a sinais por número, já que eles não são portáveis) para todos os processos no grupo de processos em primeiro plano do terminal.
Você pode envie um sinal para interromper um processo a partir da linha de comando usando o comando kill
.
kill -s STOP <pid>
(onde <pid>
é o id do processo que você deseja suspender) ou, se você deseja endereçar todos os processos de um programa com um determinado nome (tecnicamente, todos os processos cujo nome corresponde a um determinado estendido expressão regular):
pkill -STOP xterm
(onde xterm
é um nome de exemplo).
Quando precisar retomar os processos, envie sinal al SIGCONT
da mesma maneira.
Comentários
- Envia o SIGTSTP (20 no Linux em amd64 pelo menos) sinal, não SIGSTOP, e para o grupo de processo de primeiro plano do dispositivo terminal. SIGTSTP pode ser manipulado, não SIGSTOP.
- mas como saber o número de sessões que o terminal está executando
- Qual é o significado de
pid
? - @abuali " PID " é a abreviação de " ID do processo ". Veja en.wikipedia.org/wiki/Process_identifier
- @ St é phane Chazelas como konw
process ID
especial no terminal aberto
Resposta
Se você quiser interromper todos os processos que têm /dev/pts/12
como seu terminal de controle (incluindo todos os trabalhos de primeiro e segundo plano em execução nesse terminal e no shell), você pode fazer:
pkill -STOP -t pts/12
Isso também suspenderia o líder da sessão. Em alguns casos, esse pode ser retomado automaticamente. Por exemplo, GNU screen
retoma o líder da sessão assim que detecta que foi suspenso.
Se você quiser enviar o sinal SIGTSTP para o processo de primeiro plano grupo desse terminal como ^Z
você “faria:
kill -s TSTP -- "-$pgid"
Onde $pgid
é o ID do grupo de processo desse grupo de processo em primeiro plano. No Linux e BSDs na lista, você pode descobrir qual é executando ps -o tpgid= -p "$pid"
onde $pid
é o id de qualquer processo que tenha esse terminal como seu terminal de controle. Na maioria dos sistemas, qualquer um desses processos também pode descobri-lo usando tcgetpgrp()
.
Em ambos os casos, você retoma esses processos enviando o sinal SIGCONT no lugar de SIGSTOP / SIGTSTP.
Resposta
Envie o STOP
sinal para o (s) processo (s) que deseja suspender.
Você pode enviar mais tarde o sinal para cancelar a suspensão de um processo suspenso.
Por exemplo:
pkill -STOP terminal
Isso suspenderia todos os terminal
processos.
pkill -CONT terminal
Isso cancelaria a suspensão de todos os processos denominados terminal
.
Comentários
- mas como saber o número de sessões que o terminal está executando
- @abuali I ' Não tenho certeza do que você quer dizer.
pkill
irá procurar todos os processos que correspondam ao nome que você forneceu e enviará o sinal para todos eles. Se você deseja limitar a um usuário específico, adicione-u username
.
Deixe uma resposta