태그 보관물: trace

trace

STDOUT에 어떤 프로세스가 작성되는지 확인하는 방법은 무엇입니까? top모두 동일한 양의 메모리와 CPU를 사용하는 것을

프로세스의 두 인스턴스가 실행 중입니다. 그중 하나는 “frEAkIng oUT!”입니다. STDOUT에 인쇄 오류가 멈추지 않습니다.

깨진 프로세스를 죽이고 싶지만 잘못된 프로세스를 종료하지 않아야합니다. 둘 다 거의 동시에 시작되었고 사용하면 top모두 동일한 양의 메모리와 CPU를 사용하는 것을 볼 수 있습니다. 어떤 프로세스가 제대로 작동하지 않는지 알 수없는 것 같습니다.

가장 안전한 방법은 STDOUT에 쓰는 프로세스 / pid를 파악하는 것입니다.

그렇게 할 방법이 있습니까?



답변

Linux에서 쉘의 stdout이 연결된 것과 동일한 자원에 쓰고있는 내용을 알고 싶다면 다음을 수행 할 수 있습니다.

strace -fe write $(lsof -t "/proc/$$/fd/1" | sed 's/^/-p/')

그것은 write()쉘의 fd 1과 같은 파일에서 적어도 하나의 파일 디스크립터가 열려있는 모든 프로세스 의 시스템 호출 (모든 파일 디스크립터에서)을 보고합니다 .


답변

SIGSTOP (실제 PID로 pid1과 pid2를 대체 하거나 사용 killall및 어플리케이션 이름) 을 보내 두 처리를 중지 할 수 있습니다 .

kill -SIGSTOP pid1 pid2

터미널 (또는 표준 출력이 리디렉션되는 곳)의 인쇄가 중지되어야합니다. 그런 다음 중 하나를 사용하여 계속하십시오.

kill -SIGCONT pid1

오류 메시지가 즉시 나타나면 첫 번째 프로세스를 알고있는 것입니다. 그렇지 않으면 다시 중지하고 두 번째를 계속할 수 있습니다 …

중지 된 프로세스를 종료하기 전에 먼저 SIGCONT를 보내는 것이 좋습니다.

같은 기술을 사용할 수 있습니다 Ctrl-Z쉘 작업 제어 ( fg %1, bg %1, kill %1, …).


답변