특정 프로세스가 절전 모드인지 실행 중인지 확인할 수 있나요?

특정 프로세스가 절전 모드인지 실행 중인지 확인할 수 있나요?

Ubuntu에서 작동하는 다음 스크립트를 만들었습니다.정지시키다그리고시작특정 프로세스:

#!/bin/bash

loopProcess () {
   COUNTER=0
   while [  true ]; do
      echo $COUNTER
      sleep 1
      let COUNTER=COUNTER+1 
   done
}

loopProcess &
pidLoopProcess="$!"

while [  true ]; do
   read -p "" state
   if [ "$state" == 'a'  ]; then
      echo "Process is running"
      kill -CONT "$pidLoopProcess"
   elif [ "$state" == 'b'  ]; then
      echo "Process is sleeping"
      kill -STOP "$pidLoopProcess"
   fi  
done

작동 방식을 보여줍니다.

여기에 이미지 설명을 입력하세요.

특정 프로세스가 언제 실행되는지 확인할 수 있는지 알고 싶습니다.달리기또는명령줄을 사용하세요. 의사코드는 다음과 같습니다:

if [ "$(StatePID $pidLoopProcess)" == 'sleeping'  ]; then
    ## do something
fi

나는 이 스크립트를 사용하여 일부 전역 변수를 선언하고 이를 플래그로 사용할 수 있다는 것을 알고 있습니다... 하지만이 작업을 수행할 수 있는 명령줄 도구가 있는지 궁금합니다. 당신은 있나요? 가능합니까?

답변1

Linux에서는 이를 사용하여 특정 PID를 가진 프로세스의 상태를 가져올 수 있습니다.

ps -o stat= $pid

T프로세스가 중지되면 반환됩니다. 따라서 Linux 시스템을 사용한다고 가정하면 다음을 수행할 수 있습니다.

if [ "$(ps -o stat= $pid)" = "T" ]; then 
    echo stopped
else 
    echo not stopped
fi

프로세스 상태 코드의 전체 목록은 다음과 같습니다 man ps.

PROCESS STATE CODES
       Here are the different values that the s, stat and state output specifiers
       (header "STAT" or "S") will display to describe the state of a process:

               D    uninterruptible sleep (usually IO)
               I    Idle kernel thread
               R    running or runnable (on run queue)
               S    interruptible sleep (waiting for an event to complete)
               T    stopped by job control signal
               t    stopped by debugger during the tracing
               W    paging (not valid since the 2.6.xx kernel)
               X    dead (should never be seen)
               Z    defunct ("zombie") process, terminated but not reaped by its parent

   For BSD formats and when the stat keyword is used, additional characters may be
   displayed:

           <    high-priority (not nice to other users)
           N    low-priority (nice to other users)
           L    has pages locked into memory (for real-time and custom IO)
           s    is a session leader
           l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
           +    is in the foreground process group

관련 정보