Como faço para matar um processo no Linux sem usar kill?

0

Eu devo matar o job # 3 sem usar o comando kill %3 . Como faço isso? Não consigo encontrar a resposta em nenhum lugar. Eu só posso usar o comando um . Como faço para fazer isso?

    
por user3862622 27.03.2015 / 04:03

5 respostas

0

It's a review question in a textbook.

É muito fácil encontrar livros didáticos e outros documentos falando sobre kill %3 . E onde eles fazem, é bastante óbvio o que esta questão está chegando. Não está recebendo alternativas para o comando kill . Não está conseguindo usar números de identificação de processo em vez de especificadores de trabalho de shell. Está ficando assim:

To terminate a running program in the background, type kill %n, where nis the job number you want to terminate. For example, typing kill %3 terminates job number three. Some programs need more than the kill command to be terminated. Strengthen the killing power of the kill command with this syntax: kill -9 %n — Brent D. Heslop, David Angell (1990). Mastering SunOS. Sybex. p. 189

Está chegando ao fato de que às vezes SIGTERM não funciona . Assim, no pressuposto de que não funcionou (porque o processo capturou e tratou o sinal sem terminar), você precisa tentar enviar alguns sinais diferentes. Os livros dão a resposta para isso também:

A good general rule is to try TERM, INT, or HUP signals first to stop a process. If they fail, then use the KILL signal.— Robin Anderson, Andy Johnston (2002). "Day-to-day system management". Unix Unleashed. Sams Publishing. ISBN 9780672322518. p. 404.

Leitura adicional

por 27.03.2015 / 20:50
2

Um comando muito simples, se você quiser matar um trabalho em segundo plano por kill , seria:

kill $(jobs -p 3)

-p lista somente pids e o número 3 é o jobspec.

    
por 27.03.2015 / 07:47
1

Você pode sempre fg 3 (trabalho de primeiro plano # 3) e depois cancelá-lo com Control-C ou qualquer que seja o método normal para sair do comando.

    
por 27.03.2015 / 06:18
1

As perguntas de revisão são destinadas a fazer você pensar; eles não são muito bons se a resposta for escrita explicitamente no corpo do capítulo. O que mais você sabe sobre o trabalho? Você sabe o nome dele? Você sabia que foi o trabalho iniciado mais recentemente? Se todos você sabe é que é o número 3 do trabalho, claramente você tem que referenciá-lo dessa forma de alguma forma.

Existem várias maneiras de se referir a tarefas que não sejam pelo seu número; de man bash :

There are a number of ways to refer to a job in the shell. The character % introduces a job name. Job number n may be referred to as %n. A job may also be referred to using a prefix of the name used to start it, or using a substring that appears in its command line. For example, %ce refers to a stopped ce job. If a prefix matches more than one job, bash reports an error. Using %?ce, on the other hand, refers to any job containing the string ce in its command line. If the substring matches more than one job, bash reports an error. The symbols %% and %+ refer to the shell's notion of the current job, which is the last job stopped while it was in the foreground or started in the background. The previous job may be referenced using %-. In output pertaining to jobs (e.g., the output of the jobs command), the current job is always flagged with a +, and the previous job with a -. A single % (with no accompanying job specification) also refers to the current job.

Aqui está uma tabela das opções de nome de trabalho , se é mais fácil de ler.

    
por 27.03.2015 / 06:21
0

Você pode usar a função pkill (ou) killall

    
por 27.03.2015 / 06:02

Tags