Linux守护进程:nohup、&、setsid与fork的区别解析

需积分: 33 7 下载量 157 浏览量 更新于2024-09-07 2 收藏 270KB PDF 举报
"这篇文章除了探讨nohup、&、setsid、fork和fg、bg的区别,还涉及了守护进程、会话、进程组等概念,以及它们在Linux系统中的应用。" 1. **名词解释** - **会话 (Session)**: 指用户登录Linux时创建的逻辑环境,每个会话都有唯一的**会话ID (SessionID)**。 - **用户 (User)**: 能够登录Linux的账号。 - **用户ID (UserID)**: 唯一标识Linux系统中每个用户的数字。 - **伪终端 (PTY)**: 一种虚拟的终端设备,用于模拟真实终端。 - **控制终端 (TTY)**: 实际的终端设备,如物理键盘和显示器。 - **pts (Pseudo-terminal slave)**: 与PTY的master端配合,用于实现远程或图形化界面的交互。 2. **守护进程 (Daemon)** - 守护进程是在后台运行且与终端无关的进程。它不接收用户的直接输入,通常用于提供服务,如网络服务、日志记录等。 - 后台运行:通过fork创建子进程,或者在命令行中使用`&`符号将程序置于后台运行。 - 脱离终端:通过调用`setsid`,子进程可以脱离父进程的会话、进程组和控制终端。 3. **以“&”方式运行的问题** - 使用`&`虽然可以让进程在后台运行,但并未完全脱离终端,仍受到终端的控制。 4. **fork** - fork是创建新进程的操作,子进程会继承父进程的所有属性,包括会话ID和进程组ID。 5. **setsid & setuid** - **setsid**: 用于创建新的会话,使得进程成为该会话的会话首进程,从而脱离原来的终端。 - **setuid**: 改变进程的用户ID,常用于提升或降低权限,例如执行需要root权限的任务。 - 应用场景:比如SUID位设置在二进制文件上,允许普通用户以文件所有者的权限执行。 6. **fg & bg** - **fg**: 将后台运行的进程放到前台,恢复其控制权。 - **bg**: 让被挂起的进程继续在后台运行。 7. **示例代码 (abc.cpp)**: 可能包含使用上述概念的C++代码示例,用于演示如何在程序中实现后台运行和会话管理。 总结来说,nohup、&、setsid、fork和fg、bg都是Linux下管理进程的工具或操作。nohup用于在终端关闭后仍保持进程运行,`&`用于后台运行,setsid用于创建新的会话,fork用于创建子进程,而fg和bg则用于在shell中管理后台进程。了解这些工具的使用和它们之间的关系对于编写和管理Linux下的后台服务至关重要。