Como encontro o PID de um determinado programa?

4

Eu gostaria de escrever um script Bash que pesquise por PIDs que correspondam ao nome de um programa (talvez usando ps ax | grep <PROGRAM> ou algo similar) e os alimente para script ps_mem do pixelb . ps_mem precisa de uma lista de PIDs separados por vírgulas (sem espaços) para avaliar o uso da RAM, infelizmente a única maneira de procurar processos pelo nome do programa que eu conheço é ps ax | grep <PROGRAM> que retorna algo como (tomando o exemplo do editor de texto Atom do GitHub):

 7365 pts/2    S      0:00 /bin/bash /usr/bin/atom /home/fusion809/GitHub/fusion809.github.io
 7367 pts/2    Sl     2:09 /usr/share/atom/atom --executed-from=/home/fusion809/GitHub/fusion809.github.io --pid=7354 /home/fusion809/GitHub/fusion809.github.io
 7369 pts/2    S      0:00 /usr/share/atom/atom --type=zygote --no-sandbox
 7404 pts/2    Sl    69:11 /usr/share/atom/atom --type=renderer --js-flags=--harmony --no-sandbox --lang=en-GB --node-integration=true --enable-delegated-renderer --num-raster-threads=2 --gpu-rasterization-msaa-sample-count=8 --content-image-texture-target=3553 --video-image-texture-target=3553 --disable-accelerated-video-decode --disable-webrtc-hw-encoding --disable-gpu-compositing --channel=7367.0.1287479693 --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
 7469 pts/2    S      0:02 /usr/share/atom/atom --eval require('/usr/share/atom/resources/app.asar/src/compile-cache.js').setCacheDirectory('/home/fusion809/.atom/compile-cache'); require('/usr/share/atom/resources/app.asar/src/task-bootstrap.js');
10094 pts/2    Sl     0:31 /usr/share/atom/atom --type=renderer --js-flags=--harmony --no-sandbox --lang=en-GB --node-integration=true --enable-delegated-renderer --num-raster-threads=2 --gpu-rasterization-msaa-sample-count=8 --content-image-texture-target=3553 --video-image-texture-target=3553 --disable-accelerated-video-decode --disable-webrtc-hw-encoding --disable-gpu-compositing --channel=7367.1.769162379 --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
11799 pts/2    S      0:01 /usr/share/atom/atom --eval require('/usr/share/atom/resources/app.asar/src/compile-cache.js').setCacheDirectory('/home/fusion809/.atom/compile-cache'); require('/usr/share/atom/resources/app.asar/src/task-bootstrap.js');
18686 pts/2    Sl     0:02 /usr/share/atom/atom --eval require('/usr/share/atom/resources/app.asar/src/compile-cache.js').setCacheDirectory('/home/fusion809/.atom/compile-cache'); require('/usr/share/atom/resources/app.asar/src/task-bootstrap.js');
31761 pts/6    S+     0:00 grep --colour=auto atom

que, como você pode ver, está longe da sintaxe que ps_mem aceita. Existe uma maneira de extrair PIDs desta saída em um script Bash ou existe uma maneira de obter os PIDs de um programa especificado em um script Bash em um formato aceitável para ps_mem ?

    
por Brenton Horne 24.12.2015 / 16:10

2 respostas

4

O comando Pidof retorna o PID e é introduzido por um determinado nome de processo.

De acordo com a intenção, você deseja obter uma lista de PIDs separados por vírgulas, correspondendo a possíveis PIDs como um nome de processo. Pidof comando para obter isso, mas em uma lista de PIDs separados por espaços. Com a ajuda do comando tr pode truncar os caracteres correspondentes ao espaço delimitado pelo dito pid de saída de outro caractere, neste caso o comando vírgula. Poderia fazer isso:

pidof <process_name> | tr '\ ' ',' 
    
por 24.12.2015 / 16:15
0

E quanto ao pgrep e ao tr? Não tenho certeza se a última vírgula é um problema ou não.

$ pgrep chrome | tr '\n' ,
1960,1981,1982,1984,1987,2008,2047,2079,2103,2107,2117,2123,2219,4132,4559,
    
por 26.12.2015 / 10:42