프로세스가 휴면 상태가되고 깨어나는 이유를 아는 방법은 무엇입니까?


19

'top'을 수행하면 펄 스크립트 프로세스가 'S'상태에있는 것을 볼 수 있습니다. 알 수있는 방법이 있습니까?이 펄 프로세스를 잠자기 상태로 만드는 방법과 깨우는 방법은 무엇입니까? 펄 스크립트의 라인에 대해 더 많은 통찰력을 제공하기 위해 디버그하는 모든 방법은 'S'상태가됩니다.

답변:


22

S상태 의 프로세스 는 일반적으로 파일이나 네트워크에서 읽거나 쓰거나 호출 된 다른 프로그램이 완료되기를 기다리는 등의 시스템 호출을 차단합니다.

strace -p <pid>어떤 시스템 호출이 현재 진행 중인지 확인할 수 있습니다 . 그것은 같은 출력을 생성합니다

쓰기 (1, "foobar"..., 4096

이는 프로세스가 "foobar"로 시작하여 4096 바이트를 stdout (fd # 1)에 쓰려고 시도하지만 리디렉션 된 것은 바쁘고 출력 버퍼가 가득 찼음을 의미합니다.


5

프로세스는 일반적으로 I / O를 기다리고있을 때 휴면 상태가됩니다.

프로세스는 S읽기 및 쓰기를 차단할 때 상태에있게됩니다. 세마포어 또는 다른 동기화 프리미티브를 기다리는 동안 발생할 수도 있습니다.

"깨워"수 없습니다. 대기중인 데이터 / 리소스를 사용할 수있을 때만 진행됩니다.

이것은 모두 정상이며 예상되는 것이며 일반적으로 문제는 아닙니다. 일반적으로이 "프로그램"은 파일없이 명령 행에서 실행됩니다.

while (<>) { print; }

대부분의 시간을 휴면 상태로 보내면 좋을 것입니다. 사용자 입력을 기다리는 동안 CPU를 낭비하지 않기를 바랍니다.

이것이 문제 라고 생각 되면 I / O 수행 방식을 변경하십시오 (기본 장치의 블록 크기의 배수로 큰 청크 읽기, 메모리 매핑 I / O 등).

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