需求低保真原型

核心内容摘要

零基础玩转GLM-4-9B-Chat-1M:vLLM一键部署指南
Windows11系统下Multisim14.3安装全攻略:解决管理员权限/杀毒拦截/汉化失败三大痛点

突破语言壁垒:LunaTranslator零基础快速上手指南

在Linux中要使进程完全脱离父进程控制通常需要使用以下系统调用组合

setsid() - 创建新会话这是最关键的一步它会创建一个新的会话使调用进程成为会话首进程使调用进程成为新进程组的组长使调用进程脱离控制终端#includeunistd.h#includestdio.hintmain(){pid_tpidfork();if(pid

{perror(fork failed);return1;}// 父进程退出if(pid

{_exit(

;}// 子进程创建新会话if(setsid()

{perror(setsid failed);return1;}// 此时进程已脱离原会话和控制终端// 继续执行守护进程逻辑...return0;}

setpgid() - 设置进程组ID用于更精确地控制进程组关系#includeunistd.h#includestdio.hintmain(){pid_tpidfork();if(pid

{perror(fork failed);return1;}if(pid

{// 子进程// 将自己放入新的进程组通常与setsid配合if(setpgid(0,

0)

{perror(setpgid failed);return1;}// 然后创建新会话if(setsid()

{perror(setsid failed);return1;}}else{// 父进程// 父进程可以等待子进程设置完成sleep(

;// 父进程退出子进程被init进程接管}return0;}

完整的守护进程实现#includeunistd.h#includesys/stat.h#includestdio.h#includestdlib.h#includefcntl.hvoiddaemonize(){pid_tpid;//

创建子进程父进程退出pidfork();if(pid

{perror(fork);exit(EXIT_FAILURE);}if(pid

{// 父进程exit(EXIT_SUCCESS);}//

创建新会话脱离控制终端if(setsid()

{perror(setsid);exit(EXIT_FAILURE);}//

改变工作目录到根目录if(chdir(/)

{perror(chdir);exit(EXIT_FAILURE);}//

重设文件权限掩码umask(

;//

关闭所有文件描述符for(inti0;isysconf(_SC_OPEN_MAX);i){close(i);}//

重定向标准输入输出到/dev/nullintfdopen(/dev/null,O_RDWR);if(fd!-

{dup2(fd,STDIN_FILENO);dup2(fd,STDOUT_FILENO);dup2(fd,STDERR_FILENO);if(fd

{close(fd);}}}intmain(){daemonize();// 守护进程的主要逻辑while(

{// 执行任务sleep(

;}return0;}

使用 systemd 服务的现代方法对于现代Linux系统推荐使用systemd服务# /etc/systemd/system/my-service.service [Unit] DescriptionMy Daemon Service Afternetwork.target [Service] Typeforking PIDFile/var/run/my-service.pid ExecStart/usr/local/bin/my-daemon Restartalways Usernobody Groupnogroup # 确保进程完全独立 NoNewPrivilegesyes PrivateTmpyes ProtectSystemstrict ProtectHometrue PrivateDevicesyes [Install] WantedBymulti-user.target

关键区别系统调用作用效果setsid()创建新会话进程成为会话首进程脱离控制终端setpgid(pid, pgid)设置进程组将指定进程放入指定进程组fork()setsid()标准守护进程完全脱离父进程控制

6.

注意事项双重fork技巧某些情况下需要双重fork确保进程不会成为会话首进程信号处理重新设置信号处理器特别是SIGHUP资源清理关闭不需要的文件描述符工作目录更改到安全目录防止占用文件系统日志记录使用syslog或其他日志机制这样设置的进程将完全独立于原始父进程即使父进程退出也不会影响它并由init/systemd进程接管。

ww.91㊙.色萝网站-ww.91㊙.色萝网站应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123