Como terminar um programa em um shell unix? [duplicado]

0

No meu laptop, pressiono a tecla de função do laptop + pausa. Na minha área de trabalho, minha chave de quebra (ao lado da tela de impressão) é assim:

Pause
Break

Se eu pressioná-lo (sem Ctrl / Alt / etc) eu entendo isso (ignorar o eco, eles estão lá apenas para que eu pudesse descobrir o que era o que):

# sleep 10;echo "no ctrl/alt/shift/etc"

[12]+  Stopped                 sleep 10

Se eu pressioná-lo com o turno, recebo isso:

[root@ID6052 public_html]# sleep 10;echo "shift + pause/break"

[13]+  Stopped                 sleep 10

Se eu pressionar com Ctrl, nada acontece.

Se eu pressionar Pausa / Pausa com Alt, obtenho isto:

[root@ID6052 public_html]# sleep 10;echo "alt + pause/break"

[15]+  Stopped                 sleep 10

Como faço para parar apenas o programa? Se eu obtiver uma lista de processos em execução, todos esses comandos "[xx] + Stopped ..." aparecerão (em um estado parado). No meu laptop, pressionando o func + break (ou seja, apenas chave de quebra normal ... o botão func também é usado para bloqueio de rolagem, tela de impressão, etc) fecha os programas completamente!

    
por Community 31.10.2009 / 00:00

4 respostas

3

Normalmente, um shell unix terá os seguintes mapeamentos de teclas

control-C = > SIGINT (interrupção)
controle-Z = > SIGTSTP (terminal de parada / suspensão)

às vezes também há control-y = > parada atrasada (não sei como isso é feito)

O Control-C irá normalmente interromper e terminar o seu programa. Mas o SIGINT pode ser manipulado e ignorado ou processado pelo programa.

O Control-Z irá normalmente suspender (parar) o seu programa. Mas o SIGSTSP também pode ser manipulado e ignorado ou processado pelo programa, embora, na prática, isso pareça mais raro do que manipular o SIGINT.

Enviar um SIGSTOP ( kill -STOP de outro terminal) suspenderá (interromperá) seu programa e não poderá ser manipulado.

Parece que suas combinações de teclas que fazem com que seu programa seja 'Parado' são provavelmente equivalentes ao Control-Z.

Se você obter processos no estado parado, o seu shell reportará o número do trabalho. Parece que você está usando o bash. De qualquer forma, a maioria dos shells permite que você controle os trabalhos interrompidos ou em segundo plano usando seus números de trabalho.

kill -KILL %1
kill -9 %1
bg %1
fg %1

E assim por diante, mate, mate, coloque em segundo plano ou coloque em primeiro plano o seu (primeiro) trabalho, respectivamente.

Você pode usar o comando

jobs

Para listar trabalhos atualmente associados ao shell em que você está. Bem, dependendo de qual shell ele é, o que você não especifica.

    
por 31.10.2009 / 00:13
2

Experimente: control-C

    
por 31.10.2009 / 00:02
1

Você pode usar Ctrl - C para finalizar a execução de um programa no terminal.

Você pode eliminar programas que já foram parados com kill :

kill PID

em que PID é o ID do processo (o número que você verá em ps output):

[john@awesome]$python
Python 2.4.3 (#1, Sep 17 2008, 16:04:01)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-41)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
[1]+  Stopped                 python
[john@awesome]$ps
  PID TTY          TIME CMD
 3560 pts/1    00:00:00 bash
 3588 pts/1    00:00:00 python
 3609 pts/1    00:00:00 ps

Usar kill sem nenhuma opção é o mesmo que usar -TERM . Ele tentará fechar o programa normalmente. Se ainda assim não responder, você poderá forçar kill com kill -9 , embora não seja recomendado, pois pode deixar arquivos de buffers abertos.

    
por 31.10.2009 / 00:02
0

Existem dois métodos principais para interromper um programa em execução no terminal Unix:

  1. Ctrl - c enviará um sinal INT (Interrupt), que por padrão fará uma saída do programa, mas alguns programas sobrescrevem isto.
  2. Ctrl - \ enviará um sinal QUIT, que com frequência fará com que um programa pare de ser executado, mas muitas vezes não sairá de forma tão limpa.

Se isso não funcionar, use a tecla Ctrl - z para suspender o programa (ou alternar para outro terminal) e use o comando kill para enviar os sinais TERM ou KILL (nessa ordem) para o programa. Este último irá sempre terminar o programa quando ele tiver a chance de ser executado (o que nem sempre é imediato, como se estivesse lendo um arquivo de rede).

    
por 31.10.2009 / 03:05

Tags