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

天津建设项目招投标网站手机网站设计公司有哪些

天津建设项目招投标网站,手机网站设计公司有哪些,徐州营销型网站建设,泰州市城市建设网站文章目录进程程序和进程产生进程销毁进程多进程高并发设计孤儿僵尸守护进程孤儿进程#xff1a;守护进程(重点)僵尸进程#xff1a;进程 程序和进程 操作系统可以运行多个程序#xff0c;那他是如何运行的#xff1f;实际上#xff0c;CPU的执行是很快的#xff0c;而待… 文章目录进程程序和进程产生进程销毁进程多进程高并发设计孤儿僵尸守护进程孤儿进程守护进程(重点)僵尸进程进程 程序和进程 操作系统可以运行多个程序那他是如何运行的实际上CPU的执行是很快的而待运行的程序很多那么为了让操作系统运行多个程序CPU会把它的执行时间划分成很多段比如每一段是0.1秒那么就可以这样A程序运行0.1秒然后B程序运行0.1然后C程序运行0.2秒因为这个切换很快所以我们感觉程序是同时运行的。 产生进程 创建进程很简单直接调用fork函数pid_t fork(void); 创建进程用法举例 #include stdio.h #include sys/types.h #include unistd.hint main(){int pid 0;// 父子进程不共享局部变量// pid_t fork(void);pid_t fpid fork(); // fpid表示fork函数返回的值if(fpid 0){printf(创建子进程失败\n);return fpid;}else if(fpid 0){// 创建成功后子进程中fpid 0pid getpid();printf(子进程,子进程pid %d\n,getpid());}else if(fpid 0){// 创建成功后父进程的fpid 为子进程的pidpid getpid();printf(父进程,父进程pid %d\n,getpid());printf(父进程,子进程pid %d\n,getpid());}// 再创建3个子进程用于观察for(int i 3 ; i 0 fpid 0 ; i--){fpid fork();}printf(pid %d\n,pid);while (1);return 0; }调用fork函数后会创建一个子进程并且父子两个进程都从fork处执行fork函数有两个返回值对于父进程会返回子进程的pid此时pid会大于0对于子进程来说pid会等于0。 局部变量:写时复制读时共享 销毁进程 exit - 终止正在执行的进程 #include stdio.h #include sys/types.h #include unistd.h #include stdlib.hint main() {int pid 0;// pid_t fork(void);pid_t fpid fork();if (fpid 0){printf(创建子进程失败\n);return fpid;}else if (fpid 0){printf(我是子进程,马上就要exit了\n);exit(-1);printf(子进程还活着\n);}else if (fpid 0){printf(父进程还活着\n);}while (1);return 0; }这里子进程已经退出,但是父进程没有执行完毕,导致子进程没有回收变成僵尸进程 多进程高并发设计 优点: 若要用多进程实现高并发那么自己linxu系统cpu有多少核,就产生多少个进程多个核可以并发执行只有多个进程在不同的核上运行才可以充分利用多核系统的并发处理能力 比如:cpu为四核,那么主进程就产生4个子进程,让四个子进程分别在不同的核上运行, 4个子进程在工作的时候,把任务放在一个共享内存中(通过内存映射,使多个进程可以访问一个内存),哪个任务做完了,就接着拿任务给每个子进程的负载均衡 职责明确:父进程管理生死,子进程工作 查看cpu核数 cat /proc/cpuinfo#define _GNU_SOURCE #include sched.h #include stdio.h #include stdlib.h #include unistd.h #include stdint.htypedef void (*spawn_proc_pt)(void *data); static void worker_process_cycle(void *data); static void start_worker_processes(int n); pid_t spawn_process(spawn_proc_pt proc, void *data, char *name);int main(int argc, char **argv) {// 子进程用于工作父进程用于管理子进程// 开启工作进程创建4个子进程start_worker_processes(4);// 管理子进程wait(NULL); }// 开启工作进程 void start_worker_processes(int n) {int i 0;for (i n - 1; i 0; i--){// 创建子进程spawn_process(worker_process_cycle, (void *)(intptr_t)i, worker process);} }// 创建子进程 // spawn_proc_pt 类型的函数void worker_process_cycle(void *data) pid_t spawn_process(spawn_proc_pt proc, void *data, char *name) {pid_t pid;pid fork(); // 创建子进程switch (pid){case -1:fprintf(stderr, fork() failed while spawning \%s\\n, name);return -1;case 0:proc(data); // 成功创建子进程后让子进程去工作return 0;default:break;}printf(start %s %ld\n, name, (long int)pid);return pid; }// 给进程安排工作 void worker_process_cycle(void *data) {// data 其实是一个int*类型int worker (intptr_t)data;// 初始化worker_process_init(worker);// 干活for (;;){sleep(10);printf(pid %ld ,doing ...\n, (long int)getpid());} }// 初始化进程 void worker_process_init(int worker) {cpu_set_t cpu_affinity;// worker 2;// 多核高并发处理 4core 0 - 0 core 1 - 1 2 -2 3 -3CPU_ZERO(cpu_affinity); // 结构体清零// CPU_SETSIZE1024 支持cpu最大的数量CPU_SET(worker % CPU_SETSIZE, cpu_affinity); // 0 1 2 3 设置核/*在多CPU系统中通过sched_setaffinity ()可以设置进程的CPU亲和力使进程绑定在某一个或几个CPU上运行避免在CPU之间来回切换从而提高该进程的实时性能。*/if (sched_setaffinity(0, sizeof(cpu_set_t), cpu_affinity) -1){fprintf(stderr, sched_setaffinity() failed\n);} } 查看进程对应的核数 代码中函数指针不太理解的看看下方代码: // typedef 返回类型(*新类型)(参数表) typedef char (*PTRFUN)(int); PTRFUN pFun; char glFun(int a){ return;} void main() { pFun glFun; (*pFun)(2); //调用函数 } 查看进程在cpu的核上执行的命令 ps -eLo ruser,pid,lwp,psr,args 孤儿僵尸守护进程 孤儿进程 一个父进程退出而它的一个或多个子进程还在运行那么那些子进程将成为孤儿进程。孤儿进程将被init进程所收养并由init进程对它们完成状态收集工作。 想想我们如何模仿一个孤儿进程 答案是 kill 父进程! #include stdio.h #include sys/types.h #include unistd.hint main(){int fpid 1;// 父子进程不共享局部变量for(int i 5 ; i 0 fpid 0 ; i--){fpid fork();}if(fpid 0){printf(创建子进程失败\n);return fpid;}else if(fpid 0){while(1);}else if(fpid 0){while(1);}return 0; }守护进程(重点) 把孤儿进程做成守护进程 不与任何终端关联的进程通常情况下守护进程在系统启动时就在运行它们以root用户或者其他特殊用户(apache和postfix)运行并能处理一些系统级的任务。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断比如关闭终端等。那如何成为一个守护进程呢 步骤如下 1.调用fork(),创建新进程,它会是将来的守护进程.2.在父进程中调用exit(父进程挂掉),保证子进程不是进程组长3.调用setsid()创建新的会话区 – 具体先不追究4.将当前目录改成根目录(如果把当前目录作为守护进程的目录,当前目录不能被卸载他作为守护进程的工作目录)5.将标准输入,标准输出,标准错误重定向到/dev/null. 我们来看这个代码 #include stdio.h #include sys/types.h #include unistd.h #include stdlib.h #include fcntl.h #include unistd.h// 一般传入 0 , 0 int daemon(int nochdir, int noclose) {int fd 0;switch (fork()){case -1:return (-1);case 0:break;default:_exit(0); // 父进程自杀}if (setsid() -1) // 创建会画return (-1);if (!nochdir) // 将当前目录改成根目录(void)chdir(/);if (!noclose (fd open(/dev/null, O_RDWR, 0)) ! -1){// 重定向 标准输入 标准输出 标准出错(void)dup2(fd, STDIN_FILENO);(void)dup2(fd, STDOUT_FILENO);(void)dup2(fd, STDERR_FILENO);if (fd 2)(void)close(fd);}return (0); }int main() {// 创建子进程并且把父进程杀死daemon(0,0);printf(hello\n);while(1);// 处理事务return 0; }父进程自杀后守护进程 init 接管 一直在后台进行运行 僵尸进程 一个进程使用fork创建子进程如果子进程退出(exit)而父进程并没有调用wait或waitpid获取子进程的状态信息那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。 僵尸进程怎样产生的 一个进程使用fork创建子进程如果子进程退出(exit)而父进程并没有调用wait或waitpid获取子进程的状态信息那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。它需要它的父进程来为它收尸如果他的父进程没安装 SIGCHLD信号处理函数调用wait或waitpid()等待子进程结束又没有显式忽略该信号那么它就一直保持僵尸状态如果这时父进程结束了 那么init进程自动会接手这个子进程为它收尸它还是能被清除的。 1.怎么查看僵尸进程   利用命令ps可以看到有标记为的进程就是僵尸进程。 #include stdio.h #include sys/types.h #include unistd.h #include stdlib.hint main(){pid_t fpid fork();if(fpid 0){printf(创建子进程失败\n);return fpid;}else if(fpid 0){exit(-1);}else if(fpid 0){while(1);}return 0; }这里可以用 wait 和 waitpid 函数回收子进程 2.怎样来清除僵尸进程 改写父进程在子进程死后要为它收尸。具体做法是接管SIGCHLD信号。子进程死后会发送SIGCHLD信号给父进程父进程收到此信号后执行waitpid()函数为子进程收尸。这是基于这样的原理就算父进程没有调用 wait内核也会向它发送SIGCHLD消息尽管对默认处理是忽略如果想响应这个消息可以设置一个处理函数。把父进程杀掉。父进程死后僵尸进程成为孤儿进程过继给1号进程initinit始终会负责清理僵尸进程。它产生的所有僵尸进程也跟着消失。
http://www.tj-hxxt.cn/news/217318.html

相关文章:

  • 建站工具 phpwind有什么做美食的视频网站
  • 太仓做企业网站wordpress积分提现
  • 用五百丁做名字的简历网站上海做网站的故事哪家好
  • 网站做竞价对seo有影响吗网站正能量
  • 做企业网站排名优化要多少钱青岛做网站建设哪家好
  • 游戏怎么做充值网站纪检监察门户网站建设论证报告
  • 品牌网站建设方案男生必备的浏览器
  • 品牌型网站建设的好处友情链接搜读
  • 做网站的控件邯郸微信公众号开发
  • 学校网站建设开做网站需要编程嘛
  • win7怎么做网站服务器深圳网站制作公司流程
  • 推荐几个网站图片网站谷歌优化软件
  • 一级a做爰片免费网站中文信用 网站 建设方案
  • ps做网站 大小学校介绍网站模板
  • 聊城手机站网站公司电话深圳网站建设 公司元
  • 企业网站建设的好处过年做哪个网站致富
  • 网站做虚假广告wordpress原创meta
  • 做网站之前备案用html代码编写一个简单的网页
  • logo网站设计素材免费一键生成原创短视频app
  • 网站icp查询系统有没有教做韩餐的网站
  • 固定ip做网站怎么备案永久免费观看不收费的软件app
  • 泉州网站提升排名广东监理建设协会网站
  • 专门做物理的网站国产服务器品牌前十大排名
  • 网站基础建设英文注册一个有限公司需要多少钱
  • 网站浏览历史能恢复吗怎么设置的怎样在手机安装wordpress
  • 网站建设与用户需求分析深圳 营销型网站公司
  • 南昌企业制作网站设计网站建设价钱差异
  • 宜城网站开发网络营销外包
  • 网站建设合同模板wordpress 主题使用教程
  • 网站开发域名注册高性能 网站 建设