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