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

ps如何做网站轮播图大连网站建设金豆

ps如何做网站轮播图,大连网站建设金豆,企业网址怎么做,电子商务网站数据库怎么做欢迎来到Cefler的博客#x1f601; #x1f54c;博客主页#xff1a;折纸花满衣 #x1f3e0;个人专栏#xff1a;题目解析 #x1f30e;推荐文章#xff1a;进程状态、类型、优先级、命令行参数概念、环境变量(重要)、程序地址空间 目录 #x1f449;#x1f3fb;守护… 欢迎来到Cefler的博客 博客主页折纸花满衣 个人专栏题目解析 推荐文章进程状态、类型、优先级、命令行参数概念、环境变量(重要)、程序地址空间 目录 守护进程写一个守护进程daemon函数setsid函数Daemon.hppmain.cc 将tcp通信进程变为守护进程Main.cc 守护进程 概念 Linux 的守护进程Daemon Process是一种在后台运行的特殊类型的进程它们与用户没有交互界面通常用于执行系统任务、服务或守护程序。 守护进程在 Linux 系统中被设计为长期运行的进程独立于任何控制终端并在系统启动时自动启动。它们通常在系统启动过程中由初始化进程init process启动并在系统关闭时由系统管理器来终止。 而我们的网络服务不能在bash中以前台进程的方式运行真正的服务器必须在Linux后台以守护进程的方式运行 我们平常登录Linux,操作系统都会给我提供一个bash(命令行解释器)在此页面中我们也称为会话在同一个会话中创建的进程无非分为前台和后台进程但是后台进程可以有很多个而前台进程只能有一个 同时启动的多个进程可以是属于同一个进程组的组ID一般是多个进程中的第一个进程 如图我们启动一个睡眠进程此时睡眠进程在前台bash就退到后台去了所以我们此时发的任何命令都无法被解析。 此时我们可以ctrlZ终止当前进程,睡眠进程就会停止了。 fg 进程号数放前台,bg 进程号数放后台 写一个守护进程 daemon函数 daemon()函数是一个Linux/Unix系统中用来创建守护进程daemon的函数它通过一系列步骤将当前进程转变为一个守护进程。在标准的C库中没有daemon()函数但是在一些系统中如GNU libc提供了这个函数。 以下是daemon()函数的一般形式 int daemon(int nochdir, int noclose);nochdir如果该参数非零表示在调用daemon()函数之后守护进程的工作目录将不会被修改即不会改变当前工作目录为根目录。noclose如果该参数非零表示在调用daemon()函数之后守护进程的标准输入、输出和错误输出将不会被关闭即不会关闭文件描述符0、1和2。 daemon()函数的主要作用是将当前进程转变为一个守护进程。守护进程是在后台运行的系统服务通常独立于终端会话以提供某种服务或执行某些系统任务。通常守护进程需要满足以下几个特性 与终端分离守护进程通常不应该与任何终端相关联因此在创建守护进程时需要将其与任何终端分离。 独立于父进程守护进程应该是一个独立的进程不受父进程的影响即使父进程退出守护进程也能够继续运行。 关闭文件描述符通常守护进程需要关闭与标准输入、输出和错误输出相关联的文件描述符以确保不会受到终端会话的影响。 daemon()函数在实现这些特性时会完成一系列的操作包括创建子进程、关闭父进程、改变工作目录、设置文件掩码等。它简化了创建守护进程的过程使得开发者能够更容易地编写具有守护进程特性的程序。 setsid函数 setsid函数是一个Unix系统调用用于创建一个新的会话并设置当前进程的会话IDSession ID为新会话的ID。它通常在守护进程daemon中使用以确保进程独立于其父进程运行并且不受终端的影响。 在调用setsid函数之后当前进程将成为一个新的会话的领导者session leader同时成为一个新的进程组的领导者并且没有控制终端。这样做有几个作用 摆脱控制终端会话领导者不再有控制终端这意味着即使用户退出登录或关闭终端该进程仍然可以继续运行。独立于父进程新的会话和进程组意味着进程不再受父进程的影响即使父进程退出进程也可以继续运行。改变工作目录新的会话通常会将进程的工作目录更改为根目录以确保不受当前工作目录的影响。 setsid函数的原型如下 pid_t setsid(void);其中setsid不接受任何参数它返回一个pid_t类型的值表示新的会话ID。如果调用成功返回值为新的会话ID如果失败则返回-1并设置errno来指示错误的原因。 要使用setsid函数通常需要在程序中先调用fork创建一个子进程然后在子进程中调用setsid函数。这样可以确保新的会话和进程组不会受到父进程的影响。 #include unistd.h #include stdio.h #include stdlib.hint main() {pid_t pid fork();if (pid 0) {perror(fork);exit(EXIT_FAILURE);} else if (pid 0) {// 父进程退出exit(EXIT_SUCCESS);}// 在子进程中调用setsid函数pid_t sid setsid();if (sid 0) {perror(setsid);exit(EXIT_FAILURE);}// 这里是新的会话领导者// 关闭标准输入、输出和错误输出close(STDIN_FILENO);close(STDOUT_FILENO);close(STDERR_FILENO);// 守护进程的主体逻辑return 0; }以上是一个简单的守护进程的示例其中在子进程中调用了setsid函数创建了一个新的会话并关闭了标准输入、输出和错误输出最后进入守护进程的主体逻辑。 为什么要先调用fork创建一个子进程? 父进程在创建子进程后立即退出这样子进程就不会成为孤儿进程而是被init进程接管。这一步确保了守护进程不会有父进程从而独立于任何终端会话。 父进程在创建子进程后立即退出这样子进程就不会成为孤儿进程而是被init进程接管。这一步确保了守护进程不会有父进程从而独立于任何终端会话。 总的来说就是如果不创建子进程父进程成为当前会话的唯一进程组也就是进程组的组长父进程如果一旦退出整个会话也就退出玩完了。 Daemon.hpp #pragma once #includeiostream #includecstdlib #includesignal.h #includeunistd.h #include fcntl.h #include sys/types.h #include sys/stat.hconst char *root /; const char *dev_null /dev/null;// /dev/null: 凡是向这个目录写入的内容自动被丢弃void daemon() {// 1. 忽略可能引起程序异常退出的信号signal(SIGCHLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);// 2. 让自己不要成为组长if (fork() 0)exit(0);// 3. 设置让自己成为一个新的会话 后面的代码其实是子进程在走setsid();// 4. 每一个进程都有自己的CWD(当前目录)是否将当前进程的CWD更改成为 / 根目录if (ischdir)chdir(root);// 5. 已经变成守护进程啦不需要和用户的输入输出错误进行关联了if (isclose){close(0);close(1);close(2);}else{// 这里一般建议就用这种int fd open(dev_null, O_RDWR);if (fd 0){dup2(fd, 0);//重定向原本向标准输入中读的现在从fd中读dup2(fd, 1);dup2(fd, 2);close(fd);}} }main.cc #include Daemon.hpp #include unistd.hint main() {// 变成守护进程Daemon(true, false);// 是我要执行的核心代码while(true){sleep(1);}return 0; }将tcp通信进程变为守护进程 代码参考【Linux】socket编程3 代码目录 Main.cc #include memory#include TcpServer.hpp #include CommErr.hpp #include Translate.hpp #include Daemon.hppvoid Usage(std::string proc) {std::cout Usage : \n\t proc local_port\n std::endl; } void Interact(int sockfd) {while(true){char buffer[1024];ssize_t n read(sockfd, buffer, sizeof(buffer) - 1);//读取客户端信息if (n 0){buffer[n] 0;coutclinet say:bufferendl;string message buffer;if(write(sockfd, message.c_str(), message.size())0)//发送回客户端coutsend failendl;}else if (n 0) // read如果返回值是0表示读到了文件结尾(对端关闭了连接){lg.LogMessage(Info, client quit...\n);break;}else{lg.LogMessage(Error, read socket error, errno code: %d, error string: %s\n, errno, strerror(errno));break;}} } void Ping(int sockfd, InetAddrtoLocal addr) {lg.LogMessage(Debug, %s select %s success, fd : %d\n, addr.Info().c_str(), ping, sockfd);// 一直进行IOstd::string message Ping Service Start...;write(sockfd, message.c_str(), message.size());//先回应来自客户端的消息Interact(sockfd);}void Translate(int sockfd,InetAddrtoLocal addr) {lg.LogMessage(Debug, %s select %s success, fd : %d\n, addr.Info().c_str(), Translate, sockfd);std::string message Translate Service Start...;write(sockfd, message.c_str(), message.size());//先回应来自客户端的消息Translater trans;while(true){char buffer[1024];ssize_t n read(sockfd, buffer, sizeof(buffer) - 1);//读取客户端信息if (n 0){buffer[n] 0;coutclinet say:bufferendl;string message trans.Excute(buffer);if(write(sockfd, message.c_str(), message.size())0)//发送回客户端coutsend failendl;}else if (n 0) // read如果返回值是0表示读到了文件结尾(对端关闭了连接){lg.LogMessage(Info, client quit...\n);break;}else{lg.LogMessage(Error, read socket error, errno code: %d, error string: %s\n, errno, strerror(errno));break;}} }// 改成大写字符串改成大写 void Transform(int sockfd, InetAddrtoLocal addr) {lg.LogMessage(Debug, %s select %s success, fd : %d\n, addr.Info().c_str(), Transform, sockfd);} // ./tcp_server 8888 int main(int argc, char *argv[]) {if(argc ! 2){Usage(argv[0]);return Usage_Err;}uint16_t port stoi(argv[1]);//进程变为守护进程Daemon(false, false);lg.Enable(ClassFile);//使日志可以向显示屏打印std::unique_ptrTcpServer tsvr make_uniqueTcpServer(port);//在内核中注册服务类型tsvr-RegisterFunc(ping, Ping);tsvr-RegisterFunc(translate, Translate);tsvr-RegisterFunc(transform, Transform);//初始化和启动服务端tsvr-Init();tsvr-Start();return 0; }/dev/null: 凡是向这个目录写入的内容自动被丢弃kill -9 PID 删除进程daemon函数将进程-守护进程化 如上便是本期的所有内容了如果喜欢并觉得有帮助的话希望可以博个点赞收藏关注❤️ ,学海无涯苦作舟,愿与君一起共勉成长
http://www.pierceye.com/news/807219/

相关文章:

  • 网站备案 教程网站设计大全推荐
  • 临沂建设局网站官网文明网站建设工作进度表
  • 网站编辑seo旅游网站建设代码
  • 为什么自己做的网站打开是乱码wordpress live-2d
  • 素材下载网站电商自建站
  • 浙江省的网站建设公司有哪些代理注册公司一般多少钱
  • 如何在建设银行网站预约纪念币东莞网站建设服务有什
  • 有哪些可以做h5的网站代理网址上境外网
  • 做网站所需要的代码6红杏直播
  • 南通制作网站wordpress移动版设置
  • 哪个网站有免费ppt下载建筑类网站的推荐理由
  • 视觉差的网站公司外包
  • 基础做网站内蒙住房和城乡建设部网站
  • 发帖效果好的网站展馆展示设计公司排名
  • 童装网站建设文案什么网站做的号
  • 能打开的a站莆田网站建设建站系统
  • 上海市城乡建设管理局网站一个月做网站
  • 网站后台管理系统 aspwordpress拖拽上传
  • 华为手机官方网站登录爬虫做视频网站
  • 山东省工程建设信息官方网站河南网站seo推广
  • 低成本做网站 白之家重庆市建设执业资格注册管理中心网站
  • 电子商务网站建设需求在别的公司做的网站可以转走吗
  • 网站流量怎么做乡1万做网站需要几个人
  • 阿里云centos7做网站怀化网站seo
  • 我做的网站怎样被百度收录易语言 做网站mysql
  • 花店网站模板免费下载9个做简历的网站
  • 东港区网站制作seo推广模式是什么
  • 用织梦做网站能练技术吗广州专业网络推广公司
  • 下载ppt模板免费的网站在线做头像网站
  • 网络推广怎么免费做网站内部优化的方法