当前位置: 首页 > news >正文

网站 目录结构开封市住房和城乡建设局网站

网站 目录结构,开封市住房和城乡建设局网站,做跨境网站注意事项,医院网站建设的目的目录 守护进程 前台进程 后台进程 session#xff08;进程会话#xff09; 前台任务和后台任务比较好 本质 绘画和终端都关掉了#xff0c;那些任务仍然在 bash也退了#xff0c;然后就托孤了 ​编辑 守护进程化---不想受到任何用户登陆和注销的影响​编辑 如何…目录 守护进程 前台进程  后台进程 session进程会话 前台任务和后台任务比较好 本质 绘画和终端都关掉了那些任务仍然在 bash也退了然后就托孤了 ​编辑 守护进程化---不想受到任何用户登陆和注销的影响​编辑 如何做到setsid(创建新会话) 怎么保证自己不是组长 守护进程本质孤儿进程 守护进程忽略的几个信号和含义 1. SIGHUP (Hangup signal) 2. SIGINT (Interrupt signal) 3. SIGTERM (Termination signal) 4. SIGQUIT (Quit signal) 5. SIGCHLD (Child terminated signal) 6. SIGPIPE (Broken pipe signal) 为什么守护进程忽略这些信号 如何在 C/C 中忽略信号 总结 代码 网络服务器以守护进程运行 /dev/null,垃圾桶 dup2重定向到/dev/null ​编辑 测试启动后直接终止了变成后台了 检查是否起来了netstat -nltp ps ajx |head -1 ps ajx |grep tcpserver  查看工作目录ls /proc/644717 -l ​编辑 ls /proc/644717/fd -l ​编辑 把xshell关闭了服务仍然在 再打开一个xshell就等于重新启动一个会话还能看到tcpserver进程在运行 ​编辑 更改目录到根目录 ​编辑 把服务器进程关闭掉kill -9 PID 把打印的放进日志文件 守护进程函数daemon,上面的是模拟 daemon() 函数的定义 参数 返回值 daemon() 的作用 守护进程的常见步骤 使用 daemon() 示例 代码解析 daemon() 与 setsid() 和 fork() 的比较 使用守护进程时的注意事项 总结 守护进程 前台进程  后台进程 后台进程不能标准输入 3个后台进程了 把2号任务提到前台进程 ctrl c终止前台进程 把任务提到前台进程后悔了再重新放回后台 ctrl z就可以暂停然后系统自动把bash提到前台 bg 3再把3号进程启动起来 session进程会话 在Linux中session会话通常指的是与用户交互的一个环境它是系统中与某个用户交互的一系列活动的集合。会话在Linux系统中有多种用途下面是几种常见的会话类型及其相关概念 1. 登录会话Login Session 当用户通过登录界面如终端或图形界面登录到系统时系统会为该用户创建一个会话。登录会话包括 用户身份验证通过用户名和密码等方式。 运行用户的默认Shell例如bash。 用户环境变量的设置例如$PATH、$HOME等。 这种会话通常由登录管理器如login、sshd或gdm等管理。当用户退出登录时该会话会结束。 2. 进程会话Process Session 在Linux中每个进程都有一个会话Session这个会话由session leader会话领导进程控制。进程会话的特征包括 每个进程在启动时都会被分配一个会话ID。 会话通常由一个进程创建称为会话领导进程。 会话通常用于进程组管理特别是在控制终端和后台进程之间的交互。 会话的管理由setsid()系统调用进行当进程调用setsid()时它会创建一个新的会话并成为该会话的领导进程 前台任务和后台任务比较好 本质 任务里有多个进程组 每多建一个就多一个 绘画和终端都关掉了那些任务仍然在 bash也退了然后就托孤了 受到了用户登录和退出的影响 守护进程化---不想受到任何用户登陆和注销的影响 如何做到setsid(创建新会话) 怎么保证自己不是组长 守护进程本质孤儿进程 守护进程忽略的几个信号和含义 在 C/C 中守护进程通常会忽略一些信号确保其在后台继续运行而不被用户的操作或其他系统事件干扰。除了常见的信号外SIGPIPE 也是一个重要的信号守护进程通常会忽略它。以下是几个常见的守护进程忽略的信号及其作用包括 SIGPIPE 1. SIGHUP (Hangup signal) 作用最初用于通知进程终端连接已经断开。对于守护进程来说接收到 SIGHUP 信号通常意味着该进程应重新加载其配置文件。守护进程行为守护进程通常会忽略 SIGHUP 信号这样即使终端连接断开进程也会继续运行。 2. SIGINT (Interrupt signal) 作用通常由用户通过键盘操作CtrlC发送用来中断进程的执行。守护进程行为守护进程会忽略 SIGINT 信号避免被用户的键盘中断。 3. SIGTERM (Termination signal) 作用请求进程终止的信号。系统或其他进程通常会发送此信号来请求进程优雅地结束。守护进程行为尽管守护进程有时会捕获 SIGTERM 信号并优雅地退出但它也可能选择忽略该信号或者采取一些特定的清理操作后继续运行。 4. SIGQUIT (Quit signal) 作用通常由用户通过 Ctrl\ 发送用来终止进程并生成核心转储文件。守护进程行为守护进程通常会忽略 SIGQUIT 信号以避免被意外终止并生成不必要的核心转储文件。 5. SIGCHLD (Child terminated signal) 作用当子进程结束时父进程会收到 SIGCHLD 信号通常用于处理子进程的退出状态。守护进程行为守护进程可能会忽略 SIGCHLD 信号特别是当它不需要对子进程的退出状态进行处理时。 6. SIGPIPE (Broken pipe signal) 作用当一个进程向一个已经关闭的管道或套接字写入数据时操作系统会发送 SIGPIPE 信号给该进程。守护进程行为守护进程通常会忽略 SIGPIPE 信号。这是因为如果进程尝试向一个已经关闭的管道或套接字写入数据默认情况下会导致进程终止。通过忽略 SIGPIPE 信号守护进程可以避免因意外的关闭管道而终止通常这种情况下进程会返回一个错误代码而不是被强制终止。 为什么守护进程忽略这些信号 守护进程的设计目标是长时间稳定地在后台运行因此它们通常需要避免因为用户的操作如 CtrlC、系统的请求如终止信号或其他不必要的信号而中断。忽略这些信号有助于确保进程不被意外终止可以持续运行。 如何在 C/C 中忽略信号 在 C/C 中您可以使用 signal() 函数来捕获或忽略信号。若要忽略一个信号可以将信号处理程序设置为 SIG_IGN。例如 #include signal.h #include stdio.h #include stdlib.hint main() {// 忽略 SIGHUP, SIGINT, SIGPIPEsignal(SIGHUP, SIG_IGN); // 忽略 SIGHUPsignal(SIGINT, SIG_IGN); // 忽略 SIGINTsignal(SIGPIPE, SIG_IGN); // 忽略 SIGPIPE// 守护进程的逻辑while (1) {// 模拟工作sleep(1);}return 0; }总结 SIGHUP: 通常用于通知终端连接断开守护进程会忽略它。SIGINT: 用户通过 CtrlC 发送的中断信号守护进程会忽略它。SIGTERM: 请求进程终止守护进程有时会忽略它或者捕获后进行清理操作。SIGQUIT: 用户通过 Ctrl\ 发送的信号守护进程会忽略它。SIGCHLD: 子进程退出时发送的信号守护进程可能会忽略它。SIGPIPE: 管道或套接字关闭时发送的信号守护进程会忽略它避免进程被意外终止。 通过忽略这些信号守护进程能够在后台稳定运行避免不必要的中断或退出。 代码 先忽略几个常见信号 #pragma once #includeiostream #includecstdlib #includeunistd.h #includesignal.h #includestringusing namespace std;void Daemon(const string cwd ) {//1.忽略其他异常信号signal(SIGCLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);signal(SIGSTOP, SIG_IGN);//2.将自己变成独立的会话if(fork() 0){exit(0);}setsid();//3.g更改当前目录if(!cwd.empty()){chdir(cwd.c_str());//更改当前目录}} 网络服务器以守护进程运行 /dev/null,垃圾桶 dup2重定向到/dev/null Daemon.hpp #pragma once #include iostream #include cstdlib #include unistd.h #include signal.h #include string #include sys/types.h #include sys/stat.h #include fcntl.h using namespace std;const string nullfile /dev/null;void Daemon(const string cwd ) {// 1.忽略其他异常信号signal(SIGCLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);signal(SIGSTOP, SIG_IGN);// 2.将自己变成独立的会话if (fork() 0){exit(0);}setsid();// 3.g更改当前目录if (!cwd.empty()){chdir(cwd.c_str()); // 更改当前目录}// 4.有打印的标准输出标准输入的所以要把表示输入标准输出标准错误重定向至/dev/null// 标准错误一般要打印到日志文件不要打印到屏幕int fd open(nullfile.c_str(), O_RDWR);//读写方式打开if(fd 0){dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}} 测试启动后直接终止了变成后台了 检查是否起来了netstat -nltp ps ajx |head -1 ps ajx |grep tcpserver  自成进程组自成会话 查看工作目录ls /proc/644717 -l 还在当前目录 ls /proc/644717/fd -l 把xshell关闭了服务仍然在 再打开一个xshell就等于重新启动一个会话还能看到tcpserver进程在运行 更改目录到根目录 把服务器进程关闭掉kill -9 PID 把打印的放进日志文件 守护进程函数daemon,上面的是模拟 在 C/C 中daemon() 函数用于创建守护进程daemon。守护进程通常是系统后台运行的进程通常没有控制终端并且可以在系统启动时自动启动或在用户退出登录时保持运行。守护进程会与控制终端断开连接通常用于执行长期运行的任务。 daemon() 函数的定义 daemon() 函数通常在 unistd.h 中声明原型如下 #include unistd.hint daemon(int nochdir, int noclose);参数 nochdir: 如果设置为 0守护进程将在启动时改变当前工作目录为根目录/。这是因为守护进程一般不希望占用当前工作目录并防止在程序退出时当前工作目录被锁定。如果设置为 1则守护进程的当前工作目录不会改变。noclose: 如果设置为 0守护进程会关闭标准输入、标准输出和标准错误输出stdin, stdout, stderr。通常这是守护进程的行为以防它继续与终端交互。如果设置为 1守护进程将不会关闭这些文件描述符。 返回值 成功时返回 0。出错时返回 -1并将 errno 设置为具体的错误值。 daemon() 的作用 daemon() 函数执行以下操作 分离进程它使进程脱离控制终端成为一个守护进程。改变工作目录它将工作目录切换到根目录 /以确保守护进程不会阻止文件系统的卸载。关闭文件描述符它关闭进程的标准输入、标准输出和标准错误输出通常会将这些文件描述符重定向到某个日志文件或 /dev/null。 守护进程的常见步骤 通常守护进程的创建步骤包括 调用 fork() 创建子进程父进程退出。调用 setsid() 创建新会话并脱离终端。调用 daemon() 或手动设置工作目录并关闭文件描述符。 使用 daemon() 示例 下面是一个简单的 C 程序示例演示如何使用 daemon() 创建守护进程 #include stdio.h #include unistd.h #include stdlib.hint main() {// 调用 daemon() 创建守护进程if (daemon(0, 0) -1) {perror(daemon failed);exit(EXIT_FAILURE);}// 守护进程在后台执行任务while (1) {// 模拟后台任务// 这里可以执行长期运行的任务如定时备份、日志记录等sleep(60); // 每分钟执行一次}return 0; }代码解析 daemon(0, 0)将守护进程从终端脱离改变当前工作目录到根目录并关闭标准输入、标准输出和标准错误输出。这个调用会将进程转为守护进程。sleep(60)模拟守护进程在后台执行任务每分钟执行一次。 daemon() 与 setsid() 和 fork() 的比较 在手动创建守护进程时通常会使用 fork() 和 setsid() 来脱离终端并创建一个新的会话。然而daemon() 函数将这些步骤封装在一个调用中因此可以更方便地创建守护进程。基本上daemon() 做了以下几件事 创建一个子进程父进程退出。调用 setsid() 创建新会话并使进程脱离终端。改变工作目录到根目录。关闭标准输入、输出、错误输出。 使用守护进程时的注意事项 文件描述符守护进程会关闭标准输入、标准输出和标准错误输出因此在守护进程中通常需要将这些描述符重定向到 /dev/null 或某个日志文件。退出状态守护进程通常是长期运行的退出时要考虑清理工作如关闭打开的文件、释放资源等。进程管理可以使用进程管理工具如 systemd 或 init.d 来启动和管理守护进程。 总结 daemon() 是一个用于创建守护进程的方便函数它将一些常见的守护进程设置封装在一起。它脱离控制终端、改变工作目录为根目录、关闭标准输入输出等使得进程成为一个后台独立运行的守护进程。它是编写需要长期运行、无交互的后台任务程序时常用的函数。
http://www.w-s-a.com/news/656487/

相关文章:

  • h5网站开发工具有哪些wordpress清空post表
  • 公司开网站干嘛怎么制作一个免费的网站模板
  • 群晖wordpress搭建网站网站建设及管理
  • 中山企业网站建设公司抖音代运营合作模式
  • 南通营销网站开发做网站页面多少钱
  • 桂林生活网官方网站云主机和云电脑的区别
  • 内部网络网站怎么做vue做单页面网站
  • 如何建立网站教程wordpress粘帖图片
  • 广东网站备案要多久网站开发 pdf 文字版
  • 学校网站方案帮别人做钓鱼网站吗
  • 如何加强网站建设和信息宣传wordpress 搜索提示
  • 灰色网站怎么做php yaf 网站开发框架
  • 浙江建设网站首页提供做网站公司有哪些
  • 建公司网站报价公司seo是什么级别
  • 可信赖的武进网站建设中山网站建设方案
  • 网站设计方面有什么公司运动鞋网站建设目的
  • 学校门户网站流程建设方案找人做网站 多少钱
  • 网站域名更换相应内容网站策划 要求
  • 百盛联合建设集团网站开发网站的步骤
  • php做网站评价网络公司经营范围可以加技
  • 网站积分的作用保定专业网站建设
  • 莆田做网站公司电话如何提升网站访问速度
  • 网站开发流程步骤 口袋网页访问wordpress
  • 湘潭做网站的公司自助建站教程
  • 做网站推广和头条推广wordpress 验证密码错误
  • 淘宝联盟网站怎么做深圳市创想三维科技有限公司
  • 校园网站建设招标公告php网站开发什么
  • 06628 网页制作与网站开发陕西省交通建设网站
  • 做wish如何利用数据网站暗红色网站
  • 企业 网站备案 法人长春建站模板搭建