建设公司网站模板下载wordpress.php扩张
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:45
当前位置: 首页 > news >正文
建设公司网站模板下载,wordpress.php扩张,深圳有哪些做网站的公司,湖南彩票网站开发进程组、对话期和控制终端关系 每个会话有且只有一个前台进程组#xff0c;但会有0个或者多个后台进程组。产生在控制终端上的输入#xff08;Input#xff09;和信号#xff08;Signal#xff09;将发送给会话的前台进程组中的所有进程。对于输出#xff08;Output但会有0个或者多个后台进程组。产生在控制终端上的输入Input和信号Signal将发送给会话的前台进程组中的所有进程。对于输出Output来说则是在前台和后台共享的即前台和后台的打印输出都会显示在屏幕上。终端上的连接断开时 (比如网络断开或 Modem 断开)挂起信号将发送到控制进程(controlling process) 。一个用户登录后创建一个会话。一个会话中只存在一个前台进程组但可以存在多个后台进程组。第一次登陆后第一个创建的进程是shell也就是会话的领头进程该领头进程缺省处于一个前台进程组中并打开一个控制终端可以进行数据的读写。【当在shell里运行一行命令后不带创建一个新的进程组命令行中如果有多个命令会创建多个进程这些进程都处于该新建进程组中shell将该新建的进程组设置为前台进程组并将自己暂时设置为后台进程组。比如sleep 1 | sleep 2 | sleep 3】 进程ID 任何用XShell登陆只允许一个前台进程和多个后台进程。【即在命令行运行其他进程后就没法再让bash再对指令作出响应说明bash被切换为后台进程】 进程除了有PID、PPID还有组ID PGID会话ID SID终端进程组IDTPGID。 [yyqVM-8-13-centos 2023_04_22_Calculator_TCPSocket]\( sleep 10000 | sleep 20000 | sleep 30000 [yyqVM-8-13-centos 2023_04_22_Calculator_TCPSocket]\) ps ajx | head -1 ps ajx | grep sleepPPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 12145 1089 12145 12145 ? -1 S 1001 0:00 sleep 180 15703 1782 1782 15703 pts/6 1782 S 1001 0:00 sleep 10000 15703 1783 1782 15703 pts/6 1782 S 1001 0:00 sleep 20000 15703 1784 1782 15703 pts/6 1782 S 1001 0:00 sleep 30000 12598 1895 1894 12598 pts/5 1894 S 1001 0:00 grep –colorauto sleep 11424 11757 11424 1227 ? -1 Sl 0 1:11 /bin/sh -c sleep 100 [yyqVM-8-13-centos 2023_04_22_Calculator_TCPSocket]\( ps ajx | head -1 ps ajx | grep 15703PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 15703 1782 1782 15703 pts/6 1782 S 1001 0:00 sleep 10000 15703 1783 1782 15703 pts/6 1782 S 1001 0:00 sleep 20000 15703 1784 1782 15703 pts/6 1782 S 1001 0:00 sleep 30000 12598 1995 1994 12598 pts/5 1994 R 1001 0:00 grep --colorauto 15703 12247 15703 15703 15703 pts/6 1782 Ss 1001 0:00 /bin/bash --init-file /home/yyq/.vscode-server/bin/7f329fe6c66b0f86ae1574c2911b681ad5a45d63/out/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh在命令行中同时结合管道启动多个进程 sleep 1 | sleep 2 | sleep 3这3个进程sleep 10000、sleep 20000、sleep 30000父进程都是bash所以它们三是兄弟关系可以用匿名管道进行通信。 组ID PGID 同时被创建的多个进程是一个组的第一个被创建的进程是组长进程。sleep 10000、sleep 20000、sleep 30000是一个进程组的组ID是1782组长是sleep 10000 进程组是一个或多个进程的集合他们与同一作业相关联。每一个进程组都有唯一的进程组ID PGIDPGID 能够在用户层改动使用setpgid()函数可以改变当前进程的 PGID。通过fork()函数产生的子进程会继承它的父进程的进程组ID。 每一个进程组都有一个组长进程组长进程的PGID等于其PID组长进程能够先退出。 在某个进程组中只要有一个进程存在则该进程组就存在与其组长进程是否存在无关。进程组的最后进程能够退出或转移到其它进程组。 bash自成一组。 进程组的生命周期组中最后一个进程终止或其加入其他进程组离开本进程组为止。 终端进程组ID(TPGID)用来标识一个进程是否处于一个和终端相关的进程组中。前台进程组中的进程的TPGIDPGID后台进程组的PGID≠TPGID。若该进程和任何终端无关其值为TPGID-1。 前台进程组 该进程组中的进程能够向终端设备进行读、写操作的进程组。例如登陆shell例如bash通过调用int tcsetpgrp(int fd, pid_t pgrp); 函数设置为某个进程组pgrp关联终端设备fd该函数执行成功后该进程组pgrp成为前台进程组。 前台进程组中的进程的TPGIDPGID后台进程组的PGID≠TPGID。 后台进程组 后台进程组中的进程只能够向终端设备写。 会话session 会话是一个或多个进程组的集合。系统函数getsid()用来获取某个进程的会话IDSID。 会话首进程是创建该会话的进程。 一般一个用户登录后新建一个会话每个会话也有一个ID来标识SID。登录后的第一个进程叫做会话领头进程session leader通常是一个shell/bash。对于会话领头进程其PIDSID。 任何一个控制终端需要有多个进程/进程组来为用户提供服务例如bash当然用户自己也可以启动进程/进程组。这些给用户提供服务的进程/进程组又有一个会话的机制。 每个会话有且只有一个前台进程组但会有0个或者多个后台进程组。 控制终端controlling terminal 从终端开始运行的进程都会依附于这个终端这个终端称为这些进程的控制终端。 一个会话对应一个控制终端建立于控制终端相连接的会话首进程被称为控制进程一个会话中的几个进程组可被分为一个前台进程组和几个后台进程组假设一个会话有一个控制终端则他有一个前台进程组不管何时键入终端的中断键都会将中断信ID发送给前台进程组的全部会话不管何时键入终端的退出键都会将退出信ID发送给前台进程组的全部会话。 一个会话一般会拥有一个控制终端用于执行IO操作。会话的领头进程打开一个终端之后, 该终端就成为该会话的控制终端。与控制终端建立连接的会话领头进程也称为控制进程 (controlling process) 。 一个会话只能有一个控制终端。 守护进程Daemon 守护进程也就是通常所说的Daemon进程是Linux中的后台服务进程。周期性的执行某种任务或等待处理某些发生的事件。Linux系统有很多守护进程大多数服务都是用守护进程实现的。比如像我们的tftpsambanfs等相关服务。 是指自成一个会话调用系统函数setsid前提是当前进程不是进程组组长与终端相连的。 守护进程本质是孤儿进程的一种但是孤儿进程仍属于某个会话而守护进程自成一个会话。 生命周期随系统 守护进程会长时间运行常常在系统启动时就开始运行直到系统关闭时才终止。 守护进程不依赖于终端 当控制终端被关闭时相应的进程都会被自动关闭。【比如咱们平常写了一个死循环程序咱们不知道有ctrlc的时候应该如何关闭该进程关闭终端窗口】 这也就意味着关闭终端的同时也关闭了我们的程序。 但是对于守护进程来说其生命周期守护需要突破这种限制它从开始运行直到整个系统关闭才会退出所以守护进程不能依赖于终端。 创建流程 忽略信号 SIGPIPE SIGCHLD保证自己不是组长创建子进程父进程直接退出在子进程中创建新会话打开/dev/null通过dup2对标准输入/输出/错误的重定向关闭文件描述符 [yyqVM-8-13-centos 2023_04_22_Calculator_TCPSocket]\) ./Calserver 8080 [yyqVM-8-13-centos 2023_04_22_Calculator_TCPSocket]\( ps -ajx | head -1 ps -ajx | grep 8080PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND1 18544 18544 18544 ? -1 Ss 1001 0:00 ./Calserver 8080从执行结果来看我们可以看到1、该守护进程是以超级用户启动的(UID为0)2、没有控制终端(TTY为)3、终端进程组ID为-1(该进程未和任何终端相关)4、守护进程的父进程为1516即systemd(所有的守护进程的父进程)。 注意 /dev/null该路径写入的数据会被自动丢弃因为子进程是没有和任何终端相关的所以不可以用标准输入/输出/错误否则会导致进程卡住。 setsid函数 头文件#include unistd.h 功能//首先内核会创建一个新的会话并让该进程成为该会话的leader进程//同时伴随该session的建立一个新的进程组也会被创建同时该进程成为该进程组的组长//该进程此时还没有和任何控制终端关联。若需要则要另外调用tcsetpgrp//通过setsid可以让进程摆脱原会话的控制摆脱原进程组的控制摆脱原控制终端的控制 原型pid_t setsid(void);在第二步我们调用了fork()函数来创建子进程再令父进程退出。由于在调用fork()函数时子进程全盘复制了父进程的会话期、进程组和控制终端等虽然父进程退出了但原先的会话期、进程组和控制终端等并没有改变因此还不是真正意义上的独立。而setsid()函数能够使当前子进程完全独立出来从而脱离所有其他进程和终端的控制。 dup2函数 头文件#include unistd.h 功能重定向文件描述符 原型int dup2(int oldfd, int newfd);代码 #pragma once#include iostream #include signal.h #include unistd.h #include sys/types.h #include sys/stat.h #include sys/fcntl.hvoid MyDaemon() {// 1.忽略信号 SIGPIPE SIGCHLDsignal(SIGPIPE, SIG_IGN);signal(SIGCHLD, SIG_IGN);// 2.保证自己不是组长// 2.1 父进程直接退出if (fork() 0)exit(0);// 3. 在子进程中调用setsid,创建新会话setsid();// 4.打开文件黑洞int devnull open(/dev/null, O_RDONLY | O_WRONLY);// 5.标准输入/输出/错误的重定向if(devnull 0){//对cin做重定向dup2(0, devnull);//对cout做重定向dup2(1, devnull);//对cerr做重定向dup2(2, devnull);}// 6.关闭文件描述符close(devnull); }关掉守护进程 netstat -ano 可以查看所有通信进程 // 找到被占用的指定端口号所对应的进程信息并呈现 sudo lsof -i:端口号 [yyqVM-8-13-centos 2023_04_22_Calculator_TCPSocket]\) sudo lsof -i:8080 [sudo] password for yyq: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Calserver 13323 yyq 3u IPv4 279245559 0t0 TCP *:webcache (LISTEN)// 关掉守护进程 sudo kill pid
- 上一篇: 建设公司网站广告语软件开发工具简称
- 下一篇: 建设公司网站源码太原推广型网站制作
相关文章
-
建设公司网站广告语软件开发工具简称
建设公司网站广告语软件开发工具简称
- 技术栈
- 2026年03月21日
-
建设公司网站多少钱wordpress 取消版权
建设公司网站多少钱wordpress 取消版权
- 技术栈
- 2026年03月21日
-
建设工程质量协会网站湖北标书设计制作
建设工程质量协会网站湖北标书设计制作
- 技术栈
- 2026年03月21日
-
建设公司网站源码太原推广型网站制作
建设公司网站源码太原推广型网站制作
- 技术栈
- 2026年03月21日
-
建设公司需要网站吗建设网站价格
建设公司需要网站吗建设网站价格
- 技术栈
- 2026年03月21日
-
建设公司宣传网站做简历的网站viso
建设公司宣传网站做简历的网站viso
- 技术栈
- 2026年03月21日
