2. 进程的基本操作

接口函数

#include <unistd.h>
//创建子进程
pid_t fork(void); //结束子进程
void exit(int status); //进程等待
#include <sys/wait.h>
pid_t wait(int *stat_loc); //进程睡眠
unsigned int sleep(unsigned int seconds);

2.1 创建子进程

//创建子进程
//pid_t 用于保存PID信息的结构体,如果创建子进程成功,返回子进程PID,
//如果pid == 0 表示子进程
pid_t fork(void);

2.2 取消进程

void exit(int status);
//exit 用于结束子进程,使用还函数会释放子进程的所有占用资源,status 数值用于返回给父线程

2.3 同步进程

pid_t wait(int *stat_loc);
//wait 用于父进程和子进程同步,父进程调用后,就进入睡眠状态,直到子进程结束或者被其他事件唤醒。

例子:创建子进程,打印父子进程的pid

#include <sys/types.h>    //提供系统调用标志
#include <sys/stat.h> //提供系统状态信息和相关函数
#include <sys/uio.h> //提供进程I/O操作函数
#include <unistd.h> //标准函数库
#include <fcntl.h> //文件操作相关函数库
#include <string.h> //字符串操作函数库
#include <sys/wait.h> //wait调用相关函数库
#include <stdio.h> //标准输入输出函数库
#include <stdlib.h> //常用工具函数库 int main(int argc, char const *argv[])
{
int fd;
pid_t pid;
char buf[] = {}; //缓冲空间
int status;
const char *s1="我是子进程"; fd = open("file",O_RDWR | O_CREAT, );
if(fd < )
{
perror("open");
return -;
} strcpy(buf,"我是父进程"); pid = fork();
if(pid == )
{
//子进程
strcpy(buf,"我是子进程"); puts("我是子进程");
printf("子进程的pid为 %d\n",getpid());
printf("父进程的pid为 %d\n",getppid()); write(fd,buf,strlen(buf));
close(fd);
exit(status); }else if(pid > )
{
//父进程
puts("我是父进程");
printf("父进程的pid是 %d\n",getpid());
printf("子进程的pid是 %d\n",pid); write(fd,buf,strlen(buf));
close(fd); }
else{
perror("fork");
close(fd);
return -;
}
wait(&status);
return ;
}

linux进程篇 (二) 进程的基本控制的更多相关文章

  1. linux进程篇 (三) 进程间的通信2 信号通信

    2. 信号通信 用户空间 进程A <----无法通信----> 进程B -----------------|--------------------------------------|- ...

  2. linux进程篇 (一) 进程的基本概念

    进程是系统资源分配的最小单位. 1.创建和执行 父进程通过 fork 系统调用创建子进程, 子进程被创建后,处于创建状态. linux为子进程配置数据结构,如果内存空间足够,子进程就在内核中就绪,成为 ...

  3. linux进程篇 (三) 进程间的通信3 IPC通信

    3 IPC通信 用户空间 进程A <----无法通信----> 进程B -----------------|--------------------------------------|- ...

  4. linux进程篇 (三) 进程间的通信1 管道通信

    通信方式分4大类: 管道通信:无名管道 有名管道 信号通信:发送 接收 和 处理 IPC通信:共享内存 消息队列 信号灯 socke 网络通信 用户空间 进程A <----无法通信----> ...

  5. linux线程篇 (二) 线程的基本操作

      线程 进程 标识符 pthread_t pid_t 获取ID pthread_self() getpid() 创建 pthread_create() fork 销毁 pthread_exit() ...

  6. SQL编程篇 (二) 定义与流程控制

    分类: sql编程:标准的sql 编程 * 纯sql 在标准的编程中又分为 sqlserver-->T-sql oracle-->pl-sql(扩展) 变量:在使用变量之前先定义 声明变量 ...

  7. Linux基础篇二:Bash shell(壳,命令解释器)介绍

    shell执行方式: 第一:输入命令  (简单工作) 第二:   脚本  (适合大量工作) Bash shell 实际上的叫法是  GNU/Bash    如何查询呢:  bash - version ...

  8. (笔记)Linux内核学习(二)之进程

    一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程而不是进程.对 ...

  9. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

随机推荐

  1. centos msyql 5.7 yum安装

    1.wget https://repo.mysql.com//mysql57-community-release-el6-11.noarch.rpm 2.yum localinstall mysql5 ...

  2. PHP实现无限分类

    PHP实现无限分类 无限分类 递归 无限级分类是一种设计技巧,在开发中经常使用,例如:网站目录.部门结构.文章分类.笔者觉得它在对于设计表的层级结构上面发挥很大的作用,比如大家在一些平台上面,填写邀请 ...

  3. 浅谈SAP Cloud for Sales 自动化

    在Jerry还在本科进行计算机理论知识学习时,我曾经把软件开发里的质量工程师(Quality Engineer)理解成是每天只是简单地做着运行开发人员编写好的软件,如果发现问题,通知开发人员去修改这种 ...

  4. std::vector的内存释放

    先上一段代码 using namespace std; class A{ public: ~A(){ cout << "deconstruct"; }; }; #inc ...

  5. ZooKeeper介绍与环境搭建

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  6. 「CF375D Tree and Queries」

    题目 \(dsu\ on\ tree\)的板子题了 \(dsu\ on\ tree\)本质上一种优秀通过轻重链剖分优化到\(O(nlogn)\)的暴力 一般用来解决没有修改的允许离线的子树查询问题 首 ...

  7. luogu P3950 部落冲突

    嘟嘟嘟 树剖板子题. #include<cstdio> #include<iostream> #include<algorithm> #include<cma ...

  8. supervisord的配置

    https://blog.csdn.net/xyang81/article/details/51555473  这位大佬写的很详细  你们可以去参考一下

  9. 创建blob地址

    aa="121" "121" b=new Blob([aa]) Blob(3) {size: 3, type: ""} window.URL ...

  10. A Gentle Introduction to Transfer Learning for Deep Learning | 迁移学习

    by Jason Brownlee on December 20, 2017 in Better Deep Learning Transfer learning is a machine learni ...