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

图片1600px做网站湖州建设局招投标网站

图片1600px做网站,湖州建设局招投标网站,营销型网站建设要,wordpress wp shop主题目录 api 创建新进程 注意 运行某文件 例子 注意 例子,等待进程 进程是由进程控制块、程序段、数据段三部分组成 进程有都有一个父进程,除了init,父进程可以创建子进程 每个进程都有一个PID,可以用ps来查看,等…

目录

api

创建新进程

注意

 运行某文件

例子

注意

例子,等待进程


进程是由进程控制块、程序段、数据段三部分组成

进程有都有一个父进程,除了init,父进程可以创建子进程

每个进程都有一个PID,可以用ps来查看,等于进程的身份证

pid是本身进程的pid,ppid是父进程的pid

api

创建新进程

当一个进程调用 fork( )成功后,fork( )将分别返回到两个进程之中,换句话说,fork( ) 在父子两个进程中都会返回,而他们所得到的返回值也不一样

注意

  • fork( )会使得进程本身被复制(想想细胞分裂),因此被创建出来的子进程和父进程几乎是一模一样的,说“几乎”意味着子进程并不是 100%为一份父进程的复印件,他们的具体关系如下,父子进程的以下属性在创建之初完全一样,子进程相当于搞了一份复制品
    • 实际 UID 和 GID,以及有效 UID 和 GID。
    • 所有环境变量。
    • 进程组 ID 和会话 ID。
    • 当前工作路径。除非用 chdir()加以修改
    • 打开的文件。
    • 信号响应函数。
    • 整个内存空间,包括栈、堆、数据段、代码段、标准 IO 的缓冲区等等
  • 父子进程是相互独立的:由于子进程完整地复制了父进程的内存空间,因此从内存 空间的角度看他们是相互独立、互不影响的
  • 父子进程是相互平等的:他们的执行次序是随机的

 运行某文件

  • 被加载的文件的参数列表必须以自身名字为开始,以 NULL 为结尾。比如要加载执 行当前目录下的一个叫做 a.out 的文件,需要一个参数”abcd”,那么正确的调用应该是: execl(“./a.out”, “a.out”, “abcd”, NULL); 或者:const char *argv[3] = {“a.out”, “abcd”, NULL};execv(“./a.out”, argv);
  • exec 函数簇成功执行后,原有的程序代码都将被指定的文件或脚本覆盖,因此这些函数一旦成功后面的代码是无法执行的,他们也是无法返回的

例子

1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4
5 int main(int argc, char **argv)
6 {
7     pid_t x;
8     x = fork();
9
10     if(x > 0) // 父进程
11     {
12         printf("[%d]: I am the parent\n", (int)getpid());
13         exit(0);
14     }
15
16     if(x == 0) // 子进程
17     {
18         printf("[%d]: I am the child\n", (int)getpid());
19         execl("./child_elf", "child_elf", NULL); // 执行 child_elf 程序
20
21         printf("NEVER be printed\n"); // 这是一条将被覆盖的代码
22     }
23
24     return 0;
25 }

运行结果是

[24585]: I am the parent
vincent@ubuntu:~/ch05/5.2$ [24586]: I am the child
[24586]: yep, I am the child

简单来说exit会执行退出程序之前运行退出处理函数,可以用atexit来注册退出处理函数,例如

void routine1(void) // 退出处理函数
{printf("routine1 is called.\n");
}
atexit(routine1);

注意

所谓的退出状态不是退出值,退出状态包括了退出值。如果使用以上两个函数成 功获取了子进程的退出状态,则可以使用以下宏来进一步解析

例子,等待进程

1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <stdbool.h>
4 #include <unistd.h>
5 #include <string.h>
6 #include <strings.h>
7 #include <errno.h>
8
9 #include <sys/stat.h>
10 #include <sys/types.h>
11 #include <fcntl.h>
12
13 int main(int argc, char **argv)
14 {
15     pid_t x = fork();
16
17     if(x == 0) // 子进程,执行指定程序 child_elf
18     {
19         execl("./child_elf", "child_elf", NULL);
20     }
21
22     if(x > 0) // 父进程,使用 wait( )阻塞等待子进程的退出
23     {
24         int status;
25         wait(&status);
26
27         if(WIFEXITED(status)) // 判断子进程是否正常退出
28         {
29             printf("child exit normally, " 
30                 "exit value: %hhu\n", WEXITSTATUS(status));
31         }
32
33         if(WIFSIGNALED(status)) // 判断子进程是否被信号杀死
34         {
35             printf("child killed by signal: %u\n", 
36                 WTERMSIG(status));
37         }
38     }
39
40     return 0;
41 }

http://www.yayakq.cn/news/650661/

相关文章:

  • 青州住房和城乡建设网站广州网站推广找谁
  • 出版社网站必须做企业可信认证嘛关键词优化公司哪家好
  • 美容整形网站建设php网站开发心得体会
  • 昆山网站建设电话织梦怎么修改网站模板
  • 设计网站卖钱品牌策划公司经营范围
  • 四川网站建设一站式服务商网站404页面优化
  • 互助资金盘网站开发网页设计模板素材网站大全
  • 免费建站并且绑定域名微信h5网站模板下载
  • 物业服务网站建设绍兴建设银行网站首页
  • 徐州网站制作方法天津商业网站建设
  • 旅游网站排行榜前十名官网做的好的网站开发
  • 惠州企业网站建设公司网站商城怎么做的
  • 网站建设一六八互联wordpress 回复显示
  • 网站建设技术流程设迹官网
  • 北京商城网站建设律师事务所 网站模板
  • 怎么用word做网站网络规划设计师考试全程指导(第2版) pdf
  • 网站域名最便宜阿里云云虚拟主机
  • 优化大师卸载不了山东网站seo开发
  • 临海商用高端网站设计新感觉建站网站续费要多少钱
  • 2017网站设计尺寸萝岗门户网站建设
  • android直播app开发山西seo优化
  • 房地产公司网站建设方案pc 手机站网站制作
  • 织梦网站主页地址更改某企业集团网站建设方案论文
  • 网站建站平台开发服务服务采购公告黑龙江省住房和建设厅网站首页
  • 做做做做网站做网站应该学什么
  • 吉林省住房城乡建设厅网站首页网站建设项目验收报告
  • 网站建设内容保障制度郭仓镇做网站
  • 网络营销和传统营销有什么区别广州推广优化
  • 海口网站建设找薇ls15227广州网站设计制作公司有哪些
  • 把自己做的网页发布到网站装饰工程 技术支持 东莞网站建设