Pipe PID de certos processos do UNIX em ls -l

1

Eu executo códigos SAS por meio do bash.

Então, quando eu faço um ps -u <user-id> .. (1) Eu recebo o seguinte:

 UID     PID    TTY  TIME CMD
327208  921620      -  0:00 sftp-server
327208 1409136      -  0:00 sshd
327208 1503426 pts/24  0:00 ps
327208 1683576 pts/24  0:00 elssrv
327208 2334914 pts/24  0:00 ksh
327208 2609352 pts/24  0:00 sas
327208 2838702 pts/24  0:04 sas
327208 3490018 pts/24  0:00 elssrv
327208 4436128      -  0:00 sftp-server
327208 4722852 pts/24 369:02 sas
327208 4964572 pts/24  0:00 elssrv
327208 5959866      -  0:01 sshd
327208 5976318      -  0:01 sshd

Agora, se eu fizer ps -u <user-id>|grep sas .. (2)

Eu recebo os processos sas:

327208 2609352 pts/24  0:00 sas
327208 2838702 pts/24  0:05 sas
327208 4722852 pts/24 369:51 sas

Por outro lado, se eu fizer um ls -l /proc/4722852/cwd , .. (3) Eu obtenho o local onde eu corri o processo com PID 4722852.

Existe uma maneira de conectar o comando em (2) e (3)?

A saída seria a localização de todos os códigos SAS que recebo executando ps -u <user-id>|grep sas ?

    
por Kavindra Mishra 28.06.2017 / 14:48

1 resposta

1

Sim, há uma maneira muito fácil de fazer isso. Na verdade, existem muitas maneiras de conseguir o que você quer, dependendo da quantidade de informação que você quer divulgar. A primeira maneira que eu posso pensar:

ps -u <userid> | grep sas | awk '{print $2}' | xargs ls -l

Os dois primeiros comandos fazem exatamente o que eles fazem no seu segundo comando. O comando awk imprime apenas o segundo item de cada linha (itens separados por espaço em branco por padrão), o comando xargs diz "passe o que você vê em STDIN para o seguinte comando como parâmetros".

    
por 28.06.2017 / 14:56

Tags