
나는 할 수 있다는 ps -aux | xargs kill
것을 알고 있지만 응답하지 않는 모든 작업의 PID를 나열하고 싶습니다(활동 모니터의 빨간색). 빨간색의 응답하지 않는 작업을 나열하고 자동 종료하기 위해 터미널에서 실행할 수 있는 명령은 무엇입니까?
답변1
이미 누군가가 비슷한 질문을 했습니다.애플리케이션이 응답하지 않는지 어떻게 확인할 수 있나요?(어떤 프로세스가 응답하지 않는지 확인하는 것은 어려운 부분이며, 프로세스를 종료하는 것은 매우 쉽습니다). 여기에 관련 답변을 인용했습니다.
응답하지 않음 상태는 프로세스 상태가 아니라 오히려 프로세스가 창 관리자/그래픽 엔진과의 통신을 중지했습니다. 루프에 묶일 수도 있고, 소켓, 원격 파일에 매달릴 수도 있고, 이벤트를 처리하는 메인 루프로 돌아가도록 하는 모든 것이 있을 수도 있습니다. 창 관리자는 이벤트가 대기열에 등록되어 있음을 확인하고 이를 "응답 없음"으로 표시합니다.
더미 이벤트를 프로세스에 보내는 작은 X11 프로그램을 작성하고 프로세스가 응답하지 않으면 종료해야 할 수도 있습니다.
따라서 적어도 AppleScript/X11 논리에 크게 의존하지 않고서는 어떤 프로그램이 응답하지 않는지 확인하는 것이 정확히 불가능합니다.
궁금하다면 이 작은 AppleScript 조각(Mavericks용으로 제작되었으며 아마도 다른 것에서는 작동하지 않을 것임)도 연결된 스레드에 게시되었으며 기본적으로 응답하지 않는 모든 프로그램을 식별한 다음 KILL
해당 프로그램에 신호를 보냅니다.
tell application "Activity Monitor" to run --We need to run Activity Monitor
tell application "System Events" to tell process "Activity Monitor"
tell radio button 1 of radio group 1 of group 1 of toolbar 1 of window 1 to click --Using the CPU View
tell outline 1 of scroll area 1 of window 1 -- working with the list
set notResponding to rows whose value of first static text contains "Not Responding" -- Looking for Not responding process
repeat with aProcess in notResponding
set pid to value of text field 5 of aProcess -- For each non responding process retrieve the PID
if pid is not "" then do shell script ("kill -9 " & pid) -- KILL the PID.
end repeat
end tell
end tell
그러나 작동 중인 애플리케이션을 식별한 경우 를 사용하여 해당 애플리케이션의 모든 인스턴스를 종료할 수 있습니다 sudo killall [AppName]
. 예를 들어 를 sudo killall "Activity Monitor"
사용하여 개별 앱의 PID를 식별할 수 있으며 를 사용하여 결과 PID를 모두 삭제할 수 있습니다 .pgrep [AppName]
pgrep "Google Chrome"
kill [PID]
답변2
파티에 조금 늦었지만 여러분을 위해 이 작업을 수행할 터미널 애플리케이션을 작성했습니다. Activity Monitor의 UI 스크립팅 필요성을 무시하고 대신 스핀 덤프 보고서를 사용하여 응답하지 않는 프로세스를 확인하고 자동으로 종료합니다.
답변3
때때로 내 시스템을 막히게 하는 무언가가 있는 것처럼 보이는 Jenkins OSX 상자에서 나를 괴롭히고 있습니다. 모든 문제에 대해 더 나은 세부 정보를 얻을 수 있습니다. 스핀 덤프를 사용하는 아이디어에 대해 hattip @coldlogic을 시도해 보겠습니다!
$ sudo spindump -notarget 5 -timelimit 60 -stdout -noFile -noProcessingWhileSampling -aggregateStacksByProcess | grep -B 8 "Unresponsive for"
Sampling all processes for 5 seconds with 10 milliseconds of run time between samples
Sampling completed, processing symbols...
Process: System Preferences [31152]
Path: /Applications/System Preferences.app/Contents/MacOS/System Preferences
Architecture: x86_64
Parent: launchd [1]
UID: 982457465
Task size: 38.81 MB (-20 KB)
CPU Time: <0.001s (263.8K cycles, 65.8K instructions, 4.01c/i)
Note: Unresponsive for 2258 seconds before sampling
오늘은 Sys prefs가 멈추는 현상을 재현할 수 있어서 테스트용으로 사용할 수 있었습니다. 이것이 미래의 나 또는 다른 사람에게 도움이 되기를 바랍니다!
답변4
coldlogic에 감사드립니다. macos에서 응답하지 않는 프로세스를 종료하는 터미널 애플리케이션을 작성했습니다.(swift, 10.12+에서는 잘 작동함)