프로세스가 실행 중인 스크립트를 어떻게 확인합니까? 내가 사용할 때 :
ps -u user
다음과 같은 결과가 나타납니다.
10005194 26932 0.0 0.0 112700 1544 ? Ss Jun03 0:00 -bash
10005194 27117 0.0 0.0 112700 1528 ? Ss Apr24 0:00 -bash
10005194 27164 0.0 0.0 112700 2040 ? Ss Jun06 0:00 -bash
10005194 27404 0.0 0.0 112700 1544 ? Ss May27 0:00 -bash
10005194 27484 0.0 0.0 112700 1528 ? Ss Apr23 0:00 -bash
10005194 27531 0.0 0.0 112700 1528 ? Ss May22 0:00 -bash
...
수백 줄이 있습니다. 이 사용자가 많은 스크립트를 실행하고 있다는 것을 알고 있지만 스레드를 차지하는 스크립트의 범위를 좁히고 싶습니다. 이를 수행할 수 있는 방법이 있습니까?
답변1
w
("넓은"을 의미) 옵션을 사용하세요 .
man ps
(검색 ) 에서 wide
:
w
넓은 출력. 무한한 너비를 얻으려면 이 옵션을 두 번 사용하십시오.
예를 들어 ps ww -u cas
:
$ ps ww -U cas | grep bash
1350 pts/0 Ss 0:00 -bash
18345 pts/34 S 0:00 /bin/bash /home/cas/bin/myscript.sh
21293 pts/34 Ss+ 0:00 bash
이것은 -bash
로그인 쉘입니다.
plain bash
은 로그인이 아닌 대화형 쉘입니다. tty pts/34
는 동일하므로 bash 쉘의 상위 쉘(또는 먼 조부모)임을 알 수 있습니다 myscript.sh
.
/usr/env/bin bash를 사용하면 어떤 스크립트가 실행 중인지 확인할 수 없습니다. 대신, bash 실행 파일이 실행 중인 컴퓨터에 적합한지 정확하게 지정해야 합니다.
답변2
@cas가 제안한 대로 ps
몇 가지 정보를 보여줄 수 있습니다. 표시할 옵션 추가명령줄, 이는 올바른 방향으로 나아가는 단계입니다. 이 스크립트가 주어지면:
#!/usr/bin/env bash
while true
do
date
sleep 10
done
ps -ww
다음과 같은 프로세스 라인을 표시하는 것이 좋습니다 .
9417 pts/5 00:00:00 bash
9496 pts/5 00:00:00 sleep
그러나 ps -fwwl -u $USER
이는 다음과 같이 표시됩니다.
0 S tom 9417 9416 0 80 0 - 29405 - 18:08 pts/5 00:00:00 bash ./foo
0 S tom 9419 9417 0 80 0 - 28111 - 18:08 pts/5 00:00:00 sleep 10
내가 그것을 실행했기 때문이다 ./foo
. 물론 내 경로에서 "foo"를 실행하면 "./"가 발생하지 않습니다. 두 경우 모두 실행되는 실제 스크립트는 값 $PATH
과 현재 작업 디렉터리(스크립트가 시작될 때)에 따라 달라집니다. procfs가 있는 일부 시스템(예: Linux)의 경우 다음 정보를 얻을 수 있습니다.
이 모든 것을 고려하면 ps
전체 경로 이름이 있거나 없는 스크립트의 출력을 구문 분석하는 스크립트를 작성하는 데 충분한 정보(적어도 Linux의 경우)가 있습니다.
이상하게도 대부분의 쉘은 열린 스크립트 파일 설명자가 있는 것처럼 동작하기 때문에 이 정보를 제공할 것으로 예상했습니다 lsof
(그러나 빠른 검사에서는 이를 볼 수 없습니다). 따라서 ps
쉘의 환경을 분석하는 것이 완전한 솔루션을 얻는 방법인 것 같습니다.
추가 자료: