将某些 UNIX 进程的 PID 通过管道传输到 ls -l

将某些 UNIX 进程的 PID 通过管道传输到 ls -l

我通过 bash 运行 SAS 代码。

因此,当我执行ps -u <user-id>..(1) 时,我得到以下结果:

 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

现在,如果我这样做ps -u <user-id>|grep sas..(2)

我得到 sas 进程:

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

另一方面,如果我执行ls -l /proc/4722852/cwd, ..(3) 我会得到运行 PID 为 4722852 的进程的位置。

有没有办法连接(2)和(3)中的命令?

输出将是我通过运行ps -u <user-id>|grep sas?获得的所有 SAS 代码的位置。

答案1

是的,有一个非常简单的方法可以做到这一点。其实有很多方法可以得到你想要的东西,这取决于你想要出来多少信息。我能想到的第一种方法:

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

前两个命令的作用与第二个命令的作用完全相同。该awk命令仅打印出每行的第二项(默认情况下由空格分隔的项),该xargs命令表示“将您在 STDIN 上看到的内容作为参数传递给以下命令”。

相关内容