作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要一些有关 clone() 系统调用的帮助。我试图将它与标志 CLONE_CHILD_CLEARTID 一起使用,但我看不到我指定为参数的字段值有任何变化。这是一个简单的代码:
int the_child(){
exit(0);
}
int main(int argc, char * argv[])
{
pid_t child_id = 99;
printf("child %p\n",child_id);
clone((int (*)(void *))the_child,
NULL,
CLONE_VM | CLONE_CHILD_CLEARTID | SIGCHLD,
NULL, NULL,NULL, child_id);
sleep(1);
printf("child %p\n",child_id);
}
但是当两个 printf 显示总是 99 时,我做错了什么?
最佳答案
您正在通过值传递 child_id
。您应该将其作为指针传递。
This is where tid
的清除发生在内核中
/*
* We don't check the error code - if userspace has
* not set up a proper pointer then tough luck.
*/
put_user(0, tsk->clear_child_tid);
你能看到相同的评论警告吗? :)
See this blog他们通过 strace
clone
系统调用的参数
编辑:根据我们在评论中的讨论添加,child_stack
对于 sys_clone
系统调用可以为零,但对于库函数 则不能克隆()
关于克隆和 CLONE_CHILD_CLEARTID 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9851973/
我需要一些有关 clone() 系统调用的帮助。我试图将它与标志 CLONE_CHILD_CLEARTID 一起使用,但我看不到我指定为参数的字段值有任何变化。这是一个简单的代码: int the_c
我是一名优秀的程序员,十分优秀!