进程的 detached 模式 是指进程在后台独立运行,不依赖于启动它的终端或父进程。当一个进程以 detached 模式运行时,即使父进程退出,该进程仍然可以继续运行。
Detached 模式的基本理解
在操作系统中,通常有两种进程运行模式:
- 
前台模式(Foreground): 进程与终端直接关联,用户在终端中运行命令后,进程的输出会直接显示在终端中。用户需要等待进程执行完才能继续使用终端。
 - 
后台模式(Background): 进程在后台运行,用户可以在启动进程后继续使用终端。通常通过在命令后加上
&符号启动后台进程。然而,后台进程默认仍然依赖于终端。如果终端关闭或用户退出,后台进程也会被中断。 
Detached 模式的特点
当一个进程以 detached 模式运行时,它具备以下特点:
- 独立性: 进程不会依赖于启动它的终端或父进程。当终端关闭或用户退出时,进程依然会继续运行。
 - 与终端无关: 进程的输出不会与启动它的终端相关联,通常不会显示在启动它的终端中。
 - 典型用途: 一些长期运行的服务(如守护进程、后台任务)通常以 detached 模式运行。
 
实现 detached 模式的方式
- 
使用
nohup命令:nohup(no hang up)命令可以让进程在后台以 detached 模式运行,即使关闭终端,进程也会继续运行。- 示例:
nohup my_command & - 运行上述命令后,进程会在后台运行,终端关闭后进程不会被终止,输出会被重定向到 
nohup.out文件中。 
 - 
使用
setsid命令:setsid会创建一个新的会话,并将进程与当前终端分离,使其完全独立。- 示例:
setsid my_command - 该命令运行的进程会完全独立,不受终端和父进程的影响。
 
 - 
在编程中实现 detached 模式:
- 在编写代码时,可以通过调用相关的系统 API 将进程与父进程或终端分离。例如,在 Unix 系统中,可以使用 
fork()进行进程分离,创建一个守护进程(daemon)。 
 - 在编写代码时,可以通过调用相关的系统 API 将进程与父进程或终端分离。例如,在 Unix 系统中,可以使用 
 
Detached 模式的应用场景
- 守护进程: 系统中的许多守护进程(如 
sshd,cron等)都以 detached 模式运行。 - 后台服务: 长期运行的后台任务,如日志收集、数据处理等,通常需要以 detached 模式运行。
 - 自动化脚本: 某些自动化任务需要在系统启动时就独立运行,并且与用户登录状态无关。
 
总结
进程的 detached 模式是指进程在后台独立运行,与启动它的终端或父进程分离。它适用于需要持续运行、不受用户登录状态或终端影响的任务,如守护进程和后台服务。通过 nohup、setsid 等命令,可以轻松地实现 detached 模式。