web-dev-qa-db-ja.com

特定のUNIXプロセスのPIDをls-lにパイプします

SASコードをbashで実行します。

したがって、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)PID4722852でプロセスを実行した場所が取得されます。

(2)と(3)のコマンドを接続する方法はありますか?

出力は、ps -u <user-id>|grep sas?を実行して取得したすべてのSASコードの場所です。

1
Kavindra Mishra

はい、そうするための非常に簡単な方法があります。出たい情報の量に応じて、実際には必要なものを取得する方法はたくさんあります。私が考えることができる最初の方法:

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

最初の2つのコマンドは、2番目のコマンドとまったく同じように機能します。 awkコマンドは、各行の2番目の項目(デフォルトでは空白で区切られた項目)のみを出力します。xargsコマンドは、「STDINに表示される内容をパラメーターとして次のコマンドに渡す」と言います。

1
John