신호 또는 /proc를 통해 프로세스를 절전 모드에서 깨우는 방법은 무엇입니까?

신호 또는 /proc를 통해 프로세스를 절전 모드에서 깨우는 방법은 무엇입니까?

몇 년 전 저는 Linux에서 프로세스가 무작위로 절전 모드로 전환되는 문제에 직면했습니다. 당시 나는 /proc파일 시스템에 프로세스를 깨울 수 있는 트릭이 있다는 것을 알고 있었습니다. 비슷한 일을 할 수 있었던 기억이 어렴풋이 나지만 "echo R" >/proc/pid/stat올바른 명령은 아닌 것 같습니다.

인터넷에는 "잠자는 과정을 깨우는 방법"에 대한 뜨거운 주제가 많이 있습니다. 대부분의 대답은 "아, 그냥 죽여버려!"입니다. 다른 방법이 있다는 건 알지만 지금은 기억력이 나빠요.

내가 지금까지 시도한 것 :

kill -SIGCONT <pid>
echo "R" > /proc/<pid>/status
echo "R" > /proc/<pid>/stat

답변1

"잠"이란 무엇을 의미합니까?

상태 S(중단 가능 절전)를 언급하는 경우 프로세스가 I/O를 기다리고 있음을 의미합니다. 프로세스가 현재 차단 시스템 호출을 수행하고 있습니다. 일반적인 방식으로 강제로 "깨어나도록" 할 수는 없습니다. 그러면 무엇을 합니까? 수행하려는 입력 또는 출력 작업이 가능해지면 깨어납니다(예: 데이터를 읽을 수 있을 때, 쓰기 채널이 준비되었을 때 등).

상태 T(중지됨)를 언급하는 경우 프로세스가 현재 일시 중지되었음을 의미합니다. CONT 신호(SIGCONT)를 전송하여 일시중단을 해제할 수 있습니다.kill -CONT PID

프로세스는 "무작위로 절전 모드로 전환"되지 않습니다. 그들은 할 일이 없을 때 잠을 잔다. SIGTSTP, SIGSTOP, SIGTTIN, SIGTTOU와 같은 차단 신호를 받으면 일시 중지됩니다. 마지막 두 신호는 백그라운드 프로세스가 터미널에서 읽기(또는 쓰기)를 시도할 때 커널의 터미널 인터페이스에 의해 전송됩니다. 이를 인식하지 못하면 프로세스가 무작위로 중단된다고 생각할 수 있습니다. 이런 일이 발생하면 fg프로세스가 속한 작업을 나타내는 올바른 매개변수를 사용하여 백그라운드 작업을 시작한 셸에서 이를 실행해야 합니다 fg %3.

stat*Linux의 파일은 /proc읽기 전용이므로 언제 쓸 수 있는지 알 수 없습니다. 거기에 무엇을 쓰고 싶었는지 모르겠습니다. 이 파일에 의해 보고된 데이터는 커널 관리 데이터이며, 그 중 일부는 프로세스에 의해 직접적으로 변경될 수 있지만 외부에서는 변경될 수 없습니다. 예를 들어 마술처럼 프로세스를 실행 가능하게 만들 수는 없습니다.

답변2

프로세스가 신호를 처리하는 방법에 따라 다릅니다. 프로세스가 원하는 방식으로 신호를 처리하지 않으면 신호의 기본 동작이 발생하며 일부 신호는 포착될 수 있고 일부는 포착될 수 없습니다.

확실하지는 않지만 신호 매뉴얼에 나와 있는 것처럼 중지 프로세스와 절전 프로세스의 차이점을 살펴봐야 합니다.

  Cont   Default action is to continue the process if it is currently stopped.

fg휴면 프로세스의 경우 명령 일 수 있습니다 .

관련 정보