bash経由でSASコードを実行しています。
だから..(1)を実行すると、ps -u <user-id>
次のような結果が得られます。
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
最初の2つのコマンドは、2番目のコマンドとまったく同じことを行います。このawk
コマンドは、各行の2番目の項目(デフォルトではスペースで区切られた項目)のみを印刷します。これはxargs
、「STDINに表示される内容を次のコマンドの引数として渡す」という意味です。