linux中clone的参数
时间: 2024-01-22 10:20:05 浏览: 107
在 Linux 中,`clone` 函数是用于创建一个新的进程或线程的系统调用。它的原型如下:
```c
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, .../* pid_t *ptid, void *newtls, pid_t *ctid */);
```
其中,参数的含义如下:
- `fn`:新进程或线程要执行的函数。该函数的参数是 `arg`。
- `child_stack`:新进程或线程的栈空间。它是一个指针,指向新进程或线程的栈顶。如果该参数为 `NULL`,则新进程或线程将共享父进程或线程的栈空间。
- `flags`:创建新进程或线程的标志位。可以使用以下值的按位或来组合多个标志位:
- `CLONE_VM`:共享内存空间。
- `CLONE_FILES`:共享文件描述符表。
- `CLONE_FS`:共享文件系统信息。
- `CLONE_SIGHAND`:共享信号处理器。
- `CLONE_THREAD`:创建线程。
- `CLONE_NEWNS`:创建新的挂载命名空间。
- `CLONE_NEWUTS`:创建新的 UTS 命名空间。
- `CLONE_NEWIPC`:创建新的 IPC 命名空间。
- `CLONE_NEWUSER`:创建新的用户命名空间。
- `CLONE_NEWPID`:创建新的 PID 命名空间。
- `CLONE_NEWNET`:创建新的网络命名空间。
- `arg`:传递给新进程或线程的参数。
- `ptid`:指向 PID 变量的指针,在新进程或线程创建成功后,该变量会被设置为新进程或线程的 PID。
- `newtls`:新进程或线程的 TLS(Thread-Local Storage,线程本地存储)。
- `ctid`:指向 PID 变量的指针,在新进程或线程创建成功后,该变量会被设置为新进程或线程的 PID。
其中,`flags` 参数中的命名空间标志需要特殊说明:
- `CLONE_NEWNS`:该标志创建一个新的挂载命名空间。在该命名空间中,新进程或线程会看到一个全新的文件系统层次结构,与父进程或线程完全隔离。
- `CLONE_NEWUTS`:该标志创建一个新的 UTS 命名空间。在该命名空间中,新进程或线程会看到一个全新的主机名和域名,与父进程或线程不同。
- `CLONE_NEWIPC`:该标志创建一个新的 IPC 命名空间。在该命名空间中,新进程或线程会看到一个全新的 System V IPC 和 POSIX 消息队列,与父进程或线程不同。
- `CLONE_NEWUSER`:该标志创建一个新的用户命名空间。在该命名空间中,新进程或线程会看到一个全新的用户和组 ID,与父进程或线程不同。
- `CLONE_NEWPID`:该标志创建一个新的 PID 命名空间。在该命名空间中,新进程或线程会看到一个全新的 PID 空间,与父进程或线程不同。
- `CLONE_NEWNET`:该标志创建一个新的网络命名空间。在该命名空间中,新进程或线程会看到一个全新的网络设备、IP 地址、路由表和 iptables 规则,与父进程或线程不同。
阅读全文