C++学习之进程守护

目录

1.创建会话

2.守护进程概念

3.守护进程创建代码


1.创建会话

- ps ajx 查看 进程组id  和 会话id

- 创建会话 setsid()

    ```c
    pid_t setsid(void);
    ```

- 组长进程不能作为新会话的首进程,因此 fork() 后,终止父进程,子进程调用 setsid() 创建会话,以自己的进程pid, 为会话id 和 进程组 id。

# 守护进程

2.守护进程概念

## 守护进程daemon概念 

- Linux后台的一些服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在后台运行。周期性的执行某种任务,或者等待某一事件的发生。 一般采用以d 结尾的命名方式。

## 创建守护进程

```c
int main(int argc, char *argv[])
{
    pid_t pid;
    int ret, fd;

    pid = fork();        // 创建子进程
    if (pid > 0)
        exit(0);        // 终止父进程

    pid = setsid();        // 子进程创建新会话.
    if (pid == -1)
        sys_err("setsid err");

    ret = chdir("/home/itcast/bj_40");  // 改变工作目录
    if (ret == -1)
        sys_err("chdir err");

    umask(0);            // 改变文件访问权限掩码

    close(STDIN_FILENO);// 关闭标准输入文件描述符

    fd = open("/dev/null", O_RDWR);   // fd ---> 0
    if (fd == -1)
        sys_err("open err");
    dup2(fd, STDOUT_FILENO);
    dup2(fd, STDERR_FILENO);

    while (1);            // 模拟守护进程业务

    return 0;
}
```



# 线程

## 线程的概念

- Linux 系统中,线程 LWP 称之为:轻量级的进程。
- 进程:有独立的进程地址空间, 有独立的 pcb。 —— 最小资源分配单位。
- 线程:有独立的pcb,没有独立的进程地址空间。(与其他线程共享) —— 最小执行单位。

![1584326812185](课堂笔记10.assets/1584326812185.png)

- 一个创建了线程的进程,本身也沦落 为线程。

![1584327010849](课堂笔记10.assets/1584327010849.png)

- LWP 号: cpu 划分时间片依据。  —— 线程 最小执行单位。
    - 查看LWP号命令: ps -Lf 进程pid 

3.守护进程创建代码

三级映射。—— 解释了,为什么线程没有独立的进程地址空间。

![1584328121646](课堂笔记10.assets/1584328121646.png)

- 《Linux内核源代码情景分析》 ----毛德操

## 线程共享

- 独享:栈空间(用户栈、内核栈)errnum 
- 共享:./text  ./ordata  ./data  ./bss  heap堆 ----> 共享全局变量

## 线程优缺点

- 优点:
    - 并发性强。  
    - 开销小。
    - 数据通信方便。
- 缺点:
    - 库函数,稳定性差。
    - 调试、编写困难
    - 对信号支持差。
- 结论:既能使用进程开发,也能使用线程开发的程序,首选 线程。

# 线程控制原语

## 获取线程id

```c
#include <pthread.h>
pthread_t pthread_self(void);   // 获取线程id, 在进程内部标识线程身份。

返回线程id。 没有错误!
```


## 创建线程

```c
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);
参1: 传出参数,新子线的 线程id
参2: 线程属性。默认传 NULL, 表使用默认属性。
参3: 子线程回调函数。pthread_create 调用成功,该函数会被自动调用起来。
参4: 参3 的参数。
返回值:
    成功:0
    失败:直接返回错误号!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值