【Linux 网络】摸鱼还是干活?前台后台进程的 “分工内卷” 现场

一、前台进程和后台进程的区别
前台进程 VS 后台进程:

前台进程:

后台进程:

后台进程,不影响 bash ,用户可以在进程允许期间,继续执行命令;

在上面有一组 PPID 系统的 sleep 进程,而 PGID 称为进程组 ID,在最上面的那张图片图的 3578434 前面的那个数字 2 称为任务号;启动一个进程组(由多个进程执行)共同完成一个任务。所以当我们执行命令行的时候,启动一个进程组(至少是一个进程),完成某个任务;

指令学习:

jobs:查看后台进程(组)

fg + 任务号:把后台进程(组)变成前台进程

ctrl + z:把前台进程暂停变成后台进程

bg + 任务号:让暂停的进程跑起来

二、组长进程
执行一组进程中 PID 和 PGID 一样的即使组长进程:

进程组组长的作用:进程组组长可以创建一个进程组或者创建该组中的进程。

进程组的生命周期:从进程组创建开始到其中最后一个进程离开为止。

注意:主要某个进程组中有一个进程存在,则该进程组就存在,这与其组长进程是否已经终止无关。

三、会话


SID 就是会话,数字称为:会话 id;我们连接远程服务器时,这个服务器会给我们分配 bash 和终端文件 0 、1、2 ,这个过程就是一次会话,所以我们在运行进程本质是在会话中进行的,那么如果我们退出连接远程服务器时,那么在以前我们在这个会话中运行的任何进程都会终止掉,但是新服务器不会,但是我们运行的网络性任务(进程)会受到用户登录和注销的影响,所以我们可以把这个进程(任务)另起一个会话,继续执行任务(进程),此时我们断开了和远程服务器的连接也不影响这个进程继续执行,此时这个进程称为守护进程;

结论:

1)一次会话中,只允许一个前台进程组存在,但是可以存在多个后台进程组;bash 本身就是前台进程,获取用户输入,执行用户命令,如果你执行一个前台进程,此时 bash 变成后台进程,获取不到用户指令;原因:前台进程需要和用户进行交互,需要获取用户的标准输入(键盘),键盘只有一个,前台进程必须只有一个;

2)能获取键盘数据的就是前台进程,反之就是后台进程;

3)我们把自成进程组,自成会话的进程组或者作业叫做守护进程;守护进程本质也是后台进程;

如何创建守护进程:

创建一个新的 SID (会话),设置一个组 ID ,我们使用这个系统调用时,不用让当前进程是组长,否则创建创建失败,返回 -1,创建成功,返回会话 ID;也就是说不能:./程序,否则这个进程就是组长进程,所以我们可以在代码里写个 fork 函数,让子进程执行,然后父进程直接退出,此时这个进程就不是组长进程了,所以守护进程本质是一个孤儿进程;

#pragma once
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>

void Daemon()
{
// 1.忽略可能导致的进程退出的信号
signal(SIGCHLD, SIG_IGN);
signal(SIGPIPE, SIG_IGN);

// 2.让进程不是组长进程
if(fork() > 0)
exit(0);

// 更改守护进程的工作路径,建议/
chdir("/");

// 3.将自己设置称为新的会话
setsid();

// 4.看待标准输入、标准输出、标准错误
// a.关闭(如果你使用到上面三种输出方式,会报错,不推荐)
// b.把上面三种输出方式,重定向到 -> /dev/null(最佳实践)
// null 是个垃圾文件,不管什么数据丢入进去都行,但是读不到任何信息

int fd = open("/dev/null", O_RDWR);
if (fd >= 0)
{
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
}
}

一个系统调用完美代码上面的代码:

————————————————
版权声明:本文为CSDN博主「橘颂TA」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2403_84958571/article/details/157029565

阅读剩余
THE END
阿里云ECS特惠活动
阿里云ECS服务器 - 限时特惠活动

云服务器爆款直降90%

新客首单¥68起 | 人人可享99元套餐,续费同价 | u2a指定配置低至2.5折1年,立即选购享更多福利!

新客首单¥68起
人人可享99元套餐
弹性计费
7x24小时售后
立即查看活动详情
阿里云ECS服务器特惠活动