Como evitar que um processo seja executado no bash

4

O seguinte comando foi digitado:

sleep 12h; nuke-russia

Foi inserido em um dos tty s do Debian. Eu gostaria de cancelar o sono sem precisar de nada. Eu não quero que o comando nuke seja executado nem por um único momento. Eu tenho os outros cinco terminais disponíveis. O que posso fazer?

    
por Mark 27.06.2011 / 18:14

5 respostas

0

No futuro, tente usar && em vez de ; e sleep X && echo bla pressionando ctrl + C parará de dormir e não ecoará bla

Se for possível, você pode renomear o binário responsável. Dessa forma, o bash não poderá executar nuke-russia , uma vez que não existirá.

Outra solução seria matar o shell responsável

EDIT:
 Como encontrar o PID do shell responsável (que deve ser seu pai)
Se pid de sleep 12h for 1234
encontrar shell responsável com ps -o ppid= 1234
Então mate-o com kill -9

    
por 27.06.2011 / 18:33
2
  1. Localizar nuke-russia
  2. Renomeie old-nuke-russia
  3. Crie um link no mesmo diretório para ls chamado, ahem ..., nuke-russia .

Deixe o comando dormir rodar como quiser. Você tem 12 horas para encontrar a pessoa que executou o comando e estrangulá-los por tentar iniciar uma guerra mundial.

    
por 27.06.2011 / 18:21
1

Aparentemente

kill -s SIGHUP [pid]

Deve eliminar completamente essa sessão de terminal e desligar efetivamente essa sessão.

Assim como com outras respostas, o comando ps -ef | grep sleep deve obter o pid para o qual você precisa enviar o sinal.

- = EDIT = -

O kill flag -s informa ao comando que estou querendo especificar o sinal a ser usado, no meu caso SIGHUP.

Para esclarecer por que optei por sugerir o uso de kill -s SIGHUP [pid] (ou ppid como sugerido por peth), eu pedirei a ajuda de Wikipedia , que afirma:

On POSIX-compliant platforms, SIGHUP is a signal sent to a process when its controlling terminal is closed. (It was originally designed to notify the process of a serial line drop). SIGHUP is a symbolic constant defined in the header file signal.h.

...

With the decline of access via serial line, the meaning of SIGHUP has changed somewhat on modern systems, often meaning a controlling pseudo or virtual terminal has been closed.

Eu encontrei um bom número de programas que, ao serem mortos, terminarão completamente e acredito que o shell bash (executando o comando sleep) não seria diferente neste caso.

    
por 27.06.2011 / 19:07
-1

Resposta semelhante à do Linker3000 - Faça o login como root em outro terminal, e mate o processo tty (No CentOS, o processo é nomeado login, não tenho certeza sobre o Debian).

    
por 27.06.2011 / 18:34
-3

Faça login como usuário root em outro terminal.

Encontre o script nuke-russia (ou comando) e renomeie-o para outra coisa, então ...

[root@mysvr ~]# ps -ef | grep sleep
root      1362  1338  0 17:23 pts/0    00:00:00 sleep 12h
root      1393  1367  0 17:24 pts/1    00:00:00 grep sleep

Escolha o comando sleep correto na lista (se houver mais de um) e anote seu número PID - no meu caso, é 1362

digite o comando: kill -9 [PID] eg: kill -9 1362

    
por 27.06.2011 / 18:27