"top"이 "xargs"를 통해 실행되지 않는 이유는 무엇입니까?

"top"이 "xargs"를 통해 실행되지 않는 이유는 무엇입니까?

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의 경우 ( 예 :xargstopmanxargs:

   -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

topi예를 들어 유휴 프로세스 표시를 전환하기 위해 입력할 수 있는 대화형 프로그램입니다 . 실제로는 읽을 수 있도록 배열할 수 있지만 /dev/ttystdin이 터미널에 연결될 것으로 예상합니다.

예를 들어 대신 명령 대체를 사용하십시오 xargs.

top -p "$(pgrep gvfs | paste -s -d ',')"

쉘은 먼저 pgrep 및 Paste를 실행하고 이러한 명령의 출력을 가져온 다음 해당 출력을 사용하여 top을 호출합니다.

관련 정보