답변:
대기 채널은 작업이 현재 대기중인 커널의 위치입니다. 작업은 데이터 또는 처리 시간이 될 수있는 리소스를 기다려야합니다. 이 두 가지는 네트워크 소켓, 하드웨어, 파일 등을 포함합니다. 유닉스 계열 시스템에서는 대부분 파일 일뿐입니다.
0: 프로세스가 기다리고 있지 않습니다
poll_schedule_timeout
poll()I / O를 처리하는 데 사용되는 시스템 호출 1 입니다. 와 비슷합니다 select(). 2
비 차단 I / O를 사용하는 응용 프로그램은 이러한 호출을 사용하여 파일을 차단하지 않고도 파일을 읽거나 쓸 수 있는지 확인합니다. 그것들은 종종 입 / 출력 스트림에 사용되며 차단되지 않을 수도 있습니다 (그렇지 않으면 마우스가 움직이지 않을 수도 있습니다).
대기 채널 poll_schedule_timeout은 작업이 키보드 및 마우스와 같은 하드웨어, 사운드 장치 또는 네트워크 소켓과 같은 I / O를 기다리고 있음을 나타냅니다.
<linux/poll.h>있습니다. pollSystem V에서 처음 본 구현 select은 BSD UNIX와 동일합니다.
futex_wait_queue_me:
이를 설명하기 위해 잠금을 살펴 봐야합니다. 잠금은 시스템에서 작업이 리소스와 함께 작동 함을 나타내는 저장된 상태입니다. 예를 들어 파일을 읽는 작업이 하나만있을 수 있습니다. 이 작업은 파일을 잠그고 파일 을 읽으려고 하는 다른 작업 1 은 파일이 잠겨 있다는 것을 알고 잠금이 사라질 때까지 기다렸다가 파일에 액세스 할 수 있습니다. 프로세서 시간에서도 마찬가지입니다.
최신 버전의 Linux (대부분의 아키텍처에서)는 커널에서 Futex (고속 사용자 공간 뮤텍스) 잠금을 사용합니다. 상호 배제 인 Mutex는 언제든지 한 작업만으로 공통 리소스에 액세스 할 수 있다는 아이디어를 말합니다. 이를 위해 시스템의 플래그가 설정됩니다.
프로세스가 잠긴 자원을 대기하는 경우이를 대기 중 또는 "회전"이라고하며, 가능할 때까지 계속해서 액세스하려고한다는 사실을 나타냅니다. 작업이 회전하면 차단 되었다고합니다 .

Futex 잠금은 사용자 공간에서 숫자로 생각할 수 있으며, 이는 작업에 의해 증가 또는 감소 될 수 있습니다 (여러 작업이 리소스에 액세스 할 수 있는 경우이 수가 1보다 클 수 있음). 이것은 도표 4에 표시된 숫자 입니다.
이러한 작업은 대기 시간, 즉 작업 시간이 필요하면 작업을 수행하고 대기열에서 제거되는 간단한 작업 대기열 인 대기열에 대기합니다.
futex_wait_queue_me작업을 대기열에 넣습니다. 그런 다음 신호, 시간 초과 또는 웨이크 업을 기다립니다. 이 대기 채널에 있는 작업 은 대기 대기열이 아닌 대기 중이며 대기열에 대기 중입니다.
__skb_recv_datagram
잠긴 네트워크 소켓에서 일부 데이터를 기다립니다.
sk_wait_data
네트워크 소켓에서 일부 데이터를 기다립니다.
do_exit
이것은 프로세스 종료의 마지막 부분입니다. 다른 프로세스를 예약하기 do_exit()위해 schedule()다음을 호출합니다 . 때 do_exit()호출, 프로세스는 것입니다 ZOMBIE.
do_wait
프로세스가 스케줄러 대기 큐에 추가됩니다.
pipe_wait, unix_stream_data_wait
프로세스가 서브 프로세스의 데이터를 기다리고 있습니다. 예를 들어 이런 종류의 코드를 실행할 때 이런 일이 발생합니다.
echo | sleep 10 && echo hallo # pipe
또는
cat < hello.c # unix data stream
hrtimer_nanosleep
hrtimer_nanosleep()방법을 사용하여 프로세스가 대기 중 입니다. 이 방법은 프로그램이 나노초 정확도로 특정 시간 간격 동안 휴면 상태를 유지하는 데 사용할 수 있습니다.
이것들은 전부는 아니지만 다른 사람은 관찰하지 못했습니다. 내가 놓친 부분이 있으면 의견을 게시하십시오.
signal? 나는 그것에 부딪쳤다. 프로세스가 종료 되었습니까? 좀비? 또는 무엇을? 프로세스는 어떻게 되나요?
대기 채널 값은 프로세스가 현재 차단 된 커널 기능의 이름입니다.
이름은 일반적으로 시스템 호출과 관련이 있으며 매뉴얼 페이지가 있습니다.
더 자세한 정보를 원한다면 커널 소스를 확인하십시오 .
cat /proc/some_pid/stack터미널에 입력하면 다음 과 같은 출력이 나타납니다.
[<c0227f4e>] poll_schedule_timeout+0x3e/0x60
[<c022879f>] do_select+0x55f/0x670
[<c0228f40>] core_sys_select+0x140/0x240
[<c0229241>] sys_select+0x31/0xc0
[<c05c9cc4>] syscall_call+0x7/0xb
[<ffffffff>] 0xffffffff
그리고 첫 번째 줄에는 시스템 모니터에 표시되는 내용이 표시됩니다. 내가 아는 한 poll_schedule_timeout 은 프로세스가 무언가를 기다리고 있음을 나타냅니다.
소스 : 1. 프로세스 대기 채널 (WCHAN) 및 알람? -2. AskUbuntu 답변