CPU를 많이 사용하는 신비한 bash 인스턴스, 어떻게 디버깅할 수 있나요?

CPU를 많이 사용하는 신비한 bash 인스턴스, 어떻게 디버깅할 수 있나요?

bash내 CPU의 대부분을 차지하는 여러 실행 프로세스가 있는 것 같습니다 . 이것은 다음의 출력입니다 top -c.

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND         
20116 terdon    20   0 35288  14m  292 R 400.0  0.2   0:00.43 /bin/bash       
20106 terdon    20   0 35992  15m  280 R  95.9  0.2   0:00.65 /bin/bash       
20105 terdon    20   0     0    0    0 R  57.6  0.0   0:00.83 [bash]          

이것은 다음의 출력입니다 ps aux | grep bash | head -3.

terdon  7487 45.3  0.0      0     0 ?        R    19:31   0:01 [bash]
terdon  7488 66.0  0.0      0     0 ?        R    19:31   0:01 [bash]
terdon  7530 23.0  0.2  37984 17408 ?        R    19:31   0:00 /bin/bash

명령이 실행될 때마다 PID가 변경되므로 무언가가 끊임없이 다시 태어나는 것처럼 보입니다 bash.

세부 사항:

  • 여러 항목이 있습니다 [bash]. 내가 올바르게 이해했다면 [process name]이는 명령줄 인수 없이 프로세스가 시작된다는 의미입니다.
  • PID가 변경되어 무언가가 생성됩니다.
  • 로그아웃했다가 다시 로그인했지만(Cinnamon에서 근무) 문제가 지속됩니다.

이제 재부팅하면 이 문제가 사라질 것이라고 생각합니다. 주요 질문은 이러한 프로세스를 추적하기 위해 무엇을 사용할 수 있습니까?

top -c도움이 되지 않습니다. pgrep bash단지 다른 PID 목록을 제공하고 lsof /bin/bash실행 중인 bash 인스턴스를 나열하고 pstree이를 별도의 프로세스로 표시합니다.

관련이 있는 경우 Linux Mint Debian, 커널 3.2.0-4-amd64, GNU bash, 버전 4.2.36(1)-릴리스를 실행하고 있습니다.


편집하다:

재부팅했는데(해야만 했음) 예상대로 문제가 사라졌습니다. 그러나 나는 그러한 프로세스를 추적하는 방법에 대한 유용한 제안에 여전히 관심이 있습니다.

답변1

출력을 살펴보십시오 lsof | grep 'bash.*cwd'. 그러면 프로세스의 현재 작업 디렉터리가 표시됩니다.

그렇다면 pstree출력을 확인하십시오. 그렇지 않은 경우 출력을 살펴보십시오 ps aux -H. 이는 어떤 프로세스가 이러한 신비한 프로세스를 소유하고 있는지 알려줍니다.

의심스러운 것이 있는지 구성 파일을 확인하기 시작하십시오. 다음은 확인해야 할 사항의 불완전한 목록입니다.

~/.bash*
~/.profile
/etc/profile
/etc/bash*
/etc/cron.*/*

이는 프로세스를 생성하기 위해 실행된 파일 이름이 포함된 매개변수 0을 포함하여 프로세스에 대한 매개변수를 찾을 수 없음을 [process name]의미합니다 . ps이는 lsof /bin/bash해당 프로세스를 찾을 수 없음을 의미합니다.

답변2

다음 출력도 볼 수 있습니다.

ps -p <pid> -o pid,user,tty,comm,args

일부 셸 스크립트는 출력에 또는 로 표시되지만 /bin/bash출력의 매개변수는 실행 중인 정확한 스크립트를 제공해야 합니다.perltopargsps

관련 정보