可以使用Linux中的fork()
和exec()
函数来分离一个进程。 具体步骤如下:
- 使用
fork()
函数创建一个新进程。 - 在新进程中调用
setsid()
函数创建新的会话,并使新进程成为该会话的领头进程。 - 在新进程中调用
chdir()
函数改变当前工作目录,通常将其改为根目录。 - 在新进程中关闭标准输入、标准输出和标准错误输出文件描述符,以避免与父进程共享这些文件描述符,并避免在父进程中对这些文件描述符关闭或重定向的影响。
- 在新进程中调用
exec()
函数执行新的程序。 示例代码如下:
cCopy code
#include <unistd.h> #include <stdlib.h> #include <stdio.h> int main(void) { pid_t pid = fork(); if (pid < 0) { perror("fork failed"); exit(EXIT_FAILURE); } else if (pid > 0) { // 父进程退出 exit(EXIT_SUCCESS); } // 子进程 if (setsid() == -1) { perror("setsid failed"); exit(EXIT_FAILURE); } if (chdir("/") == -1) { perror("chdir failed"); exit(EXIT_FAILURE); } close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); // 执行新程序 execl("/path/to/new/program", "program", NULL); exit(EXIT_SUCCESS); }