- 论坛徽章:
- 0
|
内核为 snapgear-3.4.0开发套件里的自带的kernel, kernel版本为2.6.17,而且我看2.6.23 和2.6.25里面都没有在ARM 上实现关于waitpid的系统调用(我看的是文件是/linux-version/include/asm-arm/unistd.h,不知道我看这个文件对吗?)。而gdbserver里面的确调用了 waitpid,我用以下文件测试确实是我的kernel 没有实现waitpid 的系统调用。 我的gdbserver 的确运行起来了,不过因为出现waitpid:Function not implemented 错误信息,又退出了。
测试程序如下:
#include <stdio.h>
#include <asm/unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
pid_t pid, cpid;
int myerrno;
int count = 0;
char keep_going = 1;
pid = fork();
switch( pid )
{
case -1:
myerrno = errno;
printf("fork: %d : %s\n", myerrno, strerror( myerrno ) );
break;
case 0:
printf("This is the child, pid %d\n", getpid() );
for( count = 0; count < 3; count ++ )
{
printf("child sleeping\n");
sleep(1);
}
printf("child woke up!\n");
return 0;
break;
default:
printf("This is the parent, pid %d\n", getpid() );
while( keep_going )
{
cpid = waitpid(-1,NULL,WNOHANG);
switch( cpid )
{
case -1:
myerrno = errno;
printf( "waitpid: %d: %s\n", myerrno, strerror( myerrno ) );
return myerrno;
break;
case 0:
printf( "parent sleeping\n" );
sleep(1);
break;
default:
printf("child %d returned\n", cpid);
return 0;
break;
}
}
break;
}
return -1;
}
另外我google 的时候发现这篇关于ARM 上没有实现waitpid 的文章https://kerneltrap.org/mailarchive/linux-kernel/2007/3/20/68348
[ 本帖最后由 jiayinjia198311 于 2008-12-9 23:10 编辑 ] |
|