응용 프로그램이 응답하지 않는지 어떻게 알 수 있습니까?


11

OSX에 반복적으로 응답하지 않음 상태가되고 강제 종료해야하는 응용 프로그램이 있습니다. 자동화하기를 원했지만 ps로 프로세스를 검사 할 때 응답하지 않음 상태에 해당하는 항목이 표시되지 않습니다. 나는 보았다 상태 표시하지만, 같은 응용 프로그램 S는 이 응답 여부.

state 상태는 일련의 문자로 표시됩니다 (예 :``RWNA ''). 첫 번째 문자는 프로세스의 실행 상태를 나타냅니다.

  • I 유휴 상태 인 프로세스를 표시합니다 (약 20 초 이상 잠자기).
  • R 실행 가능한 프로세스를 표시합니다.
  • S 약 20 초 미만 동안 대기중인 프로세스를 표시합니다.
  • T 중지 된 프로세스를 표시합니다.
  • U 프로세스를 인터럽트 불가능 대기 상태로 표시합니다.
  • Z 죽은 프로세스 (``좀비 '')를 표시합니다.

활동 관리자와 같이 프로세스가 응답하지 않는지 어떻게 알 수 있습니까?


나는 AppleScript 솔루션에도 열려 있습니다.

답변:


9

응답하지 않음 상태는 프로세스 상태가 아니라 프로세스가 창 관리자 / 그래픽 엔진과의 통신을 중지했습니다. 루프에 묶여 소켓, 원격 파일에 매달 리거나 이벤트를 처리하는 기본 루프로 돌아가는 것을 막을 수 있습니다. 창 관리자는 이벤트가 큐에 대기 중임을 알리고 "응답하지 않음"으로 레이블을 지정합니다.

더미 이벤트를 프로세스로 전송하는 작은 X11 프로그램을 작성한 다음 응답하지 않으면 종료하십시오.


UIScript 수준의 액세스 권한을 가진 AppleScript를 사용하여 무언가를 작성할 수 있습니다.
Matthieu Riegler

@MatthieuRiegler AppleScript에서 어떻게 하시겠습니까?
C. Ross

다른 대답으로 예를 들었습니다.
Matthieu Riegler

4

다음은 응답하지 않는 프로세스를 찾아서 종료하는 UI 스크립팅을 사용하는 AppleScript입니다.

Mavericks의 활동 모니터와 함께 작동합니다. 그러나 이것은 UI 스크립팅이므로 Activity Monitor의 UI가 변경되었으므로 약간의 수정 없이는 이전 OS X에서 작동하지 않을 가능성이 높습니다.

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

줄에 컴파일 오류가 발생합니다 tell radio button 1 of radio. 나는 그것을 제거하고 다른 것들을 조정했다 (특정 프로그램 만 죽이고 싶다). 런타임 오류 : '오류 "시스템 이벤트에 오류가 발생했습니다 : 보조 장치에 대한 액세스가 비활성화되었습니다." "활동 모니터"프로세스의 창 1에서 번호 -1719
C. Ross

OSX Mavericks에서 해당 스크립트를 실행 했습니까?
Matthieu Riegler

OSX 10.8, 그렇지 않습니다.
C. Ross

로 변경 한 후 10.12.5에 일tell radio button 1 of radio group 1 of group 2 of toolbar 1 of window 1 to click
찰리 Gorichanaz

0

(댓글에 맞지 않기 때문에 이것을 별도의 답변으로 게시)

원본 스크립트에 대해서는 @MatthieuRiegler에게 감사드립니다.

이것은 10.12.6에서 작동했으며 원래 스크립트를 약간 수정 한 것입니다 (내 조사를 한 후 @CharlieGorichanaz의 의견을보십시오).


set textToSearchForInProcessName to "Not Responding"

--  Run Activity Monitor 
tell application "Activity Monitor" to activate

tell application "System Events" to tell process "Activity Monitor"
    --  Wait for the Activity Monitor window to open
    repeat until (exists window 1)
        delay 1
    end repeat
    --display notification "Window appeared"

    --  Wait for the Menubar to be present
    repeat until (exists menu 1 of menu bar item "View" of menu bar 1)
        delay 1
    end repeat
    --display notification "Menubar appeared"

    --  Make sure View -> My Processes is selected 
    click menu item "My Processes" of menu 1 of menu bar item "View" of menu bar 1

    --  Click the 'CPU View' button  ( **1 ) 
    click radio button 1 of radio group 1 ¬
        of group 2 of toolbar 1 ¬
        of window 1

    --  Working with the list of processes 
    tell outline 1 of scroll area 1 of window 1
        --  Looking for Not responding process  
        set notResponding to rows whose value of ¬
            first static text contains textToSearchForInProcessName

        repeat with aProcess in notResponding

            --  For each non responding process retrieve the PID 
            set pid to value of text field 1 of aProcess -- ( **2 )

            --  Kill that process using pid 
            if pid is not "" then do shell script ("kill -9 " & pid)
        end repeat
    end tell
end tell

** 1 macOS 10.12.x에서 툴바에는여기에 이미지 설명을 입력하십시오버튼group 2 of toolbar 1대신CPU, 메모리, 에너지 등의 버튼이있는 추가아이콘 이group 1 of toolbar 1있습니다. 해당 아이콘이 없으면 (이전 macOS 버전에서는 확인되지 않았습니다) CPU 등 버튼이group 1 of toolbar 1

** 2 이것은 활동 열의 PID 열을 다른 위치로 드래그 한 경우에 적용됩니다. 이 열에서 PID 열을 가장 왼쪽 위치로 드래그하여 색인을1다음과 같이변경해야했습니다.

set pid to value of text field 1 of aProcess

열은 1부터 시작하여 가장 왼쪽부터 번호가 매겨집니다. 따라서 필요한 경우 위의 행에서 강조 표시된 색인을 조정하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.