我预计等待I / O资源的linux进程应该处于“D”状态,所以我测试了:
$cat testD.cpp
#include<assert.h>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
char hello[]="hello";
int main(){
int fd[2];
assert(pipe(fd)==0);
pid_t pid=fork();
if(pid==0){//child
sleep(10);
getchar();
}else{//father
char buf[1024];
read(fd[0],buf,sizeof(buf));
printf("read%s\n",buf);
int status;
waitpid(pid,&status,0);
}
return 0;
}
编译并运行它:
$g++ testD.cpp && ./a.out
我发现它的状态是S +,但不是我预期的D.
$ps -a -umyself -o pid,ppid,stat,command|grep a.out
29798 47236 S+ ./a.out
29799 29798 S+ ./a.out
29953 59678 S+ grep --color a.out
我的问题是如何在D状态下创建自己的进程?只是希望模拟这种情况
答案 0 :(得分:1)
至少,正常的read()系统调用是可中断的,解释了为什么你的进程处于可中断的睡眠S +中,而不是在不间断的睡眠中。这是一个链接: What is an uninterruptable process?