【发布时间】:2012-09-08 21:55:28
【问题描述】:
我正在尝试使用 clone() 系统调用来创建一个与父进程共享资源的线程。 在书中我读到,如果我使用以下标志,我将能够这样做: 克隆虚拟机 |克隆文件 |克隆_SIGHAND | CLONE_FS
但似乎没有共享变量。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <linux/sched.h>
#include <string.h>
#define STACK_SIZE 65536
#define BUFSIZE 200
int n = 5;
int Child(void *);
int main() {
pid_t pid;
char *stack;
stack = malloc(STACK_SIZE);
pid = clone(Child,stack + STACK_SIZE, CLONE_SIGHAND|CLONE_FS|CLONE_VM|CLONE_FILES);
wait(NULL);
char buf[BUFSIZE];
sprintf(buf,"Back to parent: Value of n: %d\n",n);
write(1,buf,strlen(buf));
return 0;
}
int Child(void *args) {
n += 15;
char buf[BUFSIZE];
sprintf(buf,"In child: Value of n: %d\n",n);
write(1,buf,strlen(buf));
}
输出也不断变化。我很困惑。
【问题讨论】:
-
听起来你可以只使用
pthreads。真的有必要手动使用特定于 Linux 的、非常复杂的系统调用吗? -
确实可以。我只是想看看 clone() 是如何工作的。