Quem é responsável por definir o nome do processo?

2

Estou trabalhando em um script existente baseado em Linux, onde ele contém o seguinte conteúdo

pid='jps | grep TestServer | awk '{print $1}''
kill -9 $pid

Eu entendo que isso matará esse processo chamado 'TestServer'

Eu sou novo no Linux e estou tentando entender o script, então, por favor, desculpe se esta é uma pergunta idiota.

Por favor, diga-me Quem é responsável por definir o nome do processo "TestServer"

    
por Der Hochstapler 04.10.2012 / 13:43

2 respostas

4

Um processo não tem nome. Tem um número único (positivo), chamado seu pid (id do processo).

Quase todos os processos são iniciados - a partir de seu processo pai - pela chamada de sistema fork documentada no Página de manual fork (2) (às vezes, vfork (2) pode ser usado). Um processo bifurcado é quase idêntico ao seu pai (ele executa o mesmo binário). Para executar um novo programa, o execve (2) syscall é usado dentro de algum processo.

No entanto, um processo executa algum programa, que possui um nome (já que existe no sistema de arquivos). Você pode encontrar muito mais sobre processos através do proc (5) pseudo-sistema de arquivos. Naturalmente, vários processos podem executar o mesmo programa. Você pode tentar ls -l /proc/self/ para listar os pseudofiles relacionados ao seu processo (aquele que executa o comando ls ). Você pode se divertir tentando cat /proc/self/maps . E /proc/1234/ informa sobre o processo de pid 1234.

Os utilitários pkill , pgrep , pidof estão usando /proc .

Sugiro que você leia um bom livro sobre programação unix avançada em papel e em http: / /advancedlinuxprogramming.com">programação avançada do Linux - na web; Leia também sobre syscalls (2) , também o wikipage em syscalls .

Seu script não está certo ao usar diretamente kill -9 . Ele deve tentar primeiro kill -TERM then kill -QUIT (para permitir que o programa termine bem, por exemplo, limpeza de arquivos temporários, etc ...) e somente finalmente kill -KILL (ou seja, kill -9 ). Você pode ler a página do manual kill (2) (e também página do manual signal (7) ).

adendos

(adicionado em julho de 2014)

No Linux, você pode usar a função pthread_setname_np (3) específica do Linux para definir um nome abreviado de um encadeamento (não um processo)

    
por 04.10.2012 / 13:52
3

O nome vem do nome dado ao programa. Então, qualquer que seja o arquivo que contém o executável, é chamado. Se o arquivo for chamado de fred, o nome do processo será fred.

A melhor maneira de matar o processo pelo nome é usar o pkill.

pkill TestServer
    
por 04.10.2012 / 13:44

Tags