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
처음 두 명령은 두 번째 명령과 똑같은 작업을 수행합니다. 이 awk
명령은 각 줄의 두 번째 항목(기본적으로 공백으로 구분된 항목)만 인쇄합니다. 이는 xargs
"STDIN에 표시된 내용을 다음 명령의 인수로 전달"한다는 의미입니다.