!["top"이 "xargs"를 통해 실행되지 않는 이유는 무엇입니까?](https://linux55.com/image/201062/%22top%22%EC%9D%B4%20%22xargs%22%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EC%8B%A4%ED%96%89%EB%90%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
top
-p
옵션과 여러 PID를 사용하여 실행 하려고 합니다.xargs
. 그러나 top
실행에 실패하고 오류가 발생합니다 top: failed tty get
.
$ pgrep gvfs | paste -s -d ',' | xargs -t top -p
top -p 1598,1605,1623,1629,1635,1639,1645,1932,2744
top: failed tty get
실행될 전체 명령을 보려면 -t
옵션을 사용합니다 . xargs
보기에는 좋아 보이며 수동으로 성공적으로 실행할 수 있습니다.
top -p 1598,1605,1623,1629,1635,1639,1645,1932,2744
그러나 에서는 실행되지 않습니다 xargs
. 왜 그런 겁니까?
답변1
대화형 애플리케이션 --open-tty
의 경우 ( 예 :xargs
top
manxargs:
-o, --open-tty
Reopen stdin as /dev/tty in the child process before
executing the command. This is useful if you want xargs
to run an interactive application.
실행할 명령은 다음 top
과 같아야 합니다.
pgrep gvfs | paste -s -d ',' | xargs --open-tty top -p
답변2
top
i
예를 들어 유휴 프로세스 표시를 전환하기 위해 입력할 수 있는 대화형 프로그램입니다 . 실제로는 읽을 수 있도록 배열할 수 있지만 /dev/tty
stdin이 터미널에 연결될 것으로 예상합니다.
예를 들어 대신 명령 대체를 사용하십시오 xargs
.
top -p "$(pgrep gvfs | paste -s -d ',')"
쉘은 먼저 pgrep 및 Paste를 실행하고 이러한 명령의 출력을 가져온 다음 해당 출력을 사용하여 top을 호출합니다.