linux进程篇 (二) 进程的基本控制
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进程篇 (二) 进程的基本控制的更多相关文章
- linux进程篇 (三) 进程间的通信2 信号通信
2. 信号通信 用户空间 进程A <----无法通信----> 进程B -----------------|--------------------------------------|- ...
- linux进程篇 (一) 进程的基本概念
进程是系统资源分配的最小单位. 1.创建和执行 父进程通过 fork 系统调用创建子进程, 子进程被创建后,处于创建状态. linux为子进程配置数据结构,如果内存空间足够,子进程就在内核中就绪,成为 ...
- linux进程篇 (三) 进程间的通信3 IPC通信
3 IPC通信 用户空间 进程A <----无法通信----> 进程B -----------------|--------------------------------------|- ...
- linux进程篇 (三) 进程间的通信1 管道通信
通信方式分4大类: 管道通信:无名管道 有名管道 信号通信:发送 接收 和 处理 IPC通信:共享内存 消息队列 信号灯 socke 网络通信 用户空间 进程A <----无法通信----> ...
- linux线程篇 (二) 线程的基本操作
线程 进程 标识符 pthread_t pid_t 获取ID pthread_self() getpid() 创建 pthread_create() fork 销毁 pthread_exit() ...
- SQL编程篇 (二) 定义与流程控制
分类: sql编程:标准的sql 编程 * 纯sql 在标准的编程中又分为 sqlserver-->T-sql oracle-->pl-sql(扩展) 变量:在使用变量之前先定义 声明变量 ...
- Linux基础篇二:Bash shell(壳,命令解释器)介绍
shell执行方式: 第一:输入命令 (简单工作) 第二: 脚本 (适合大量工作) Bash shell 实际上的叫法是 GNU/Bash 如何查询呢: bash - version ...
- (笔记)Linux内核学习(二)之进程
一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程而不是进程.对 ...
- Linux内核学习笔记二——进程
Linux内核学习笔记二——进程 一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...
随机推荐
- Error: A JNI error has occurred, please check your installation and try again
自己写的maven项目打包以后的一个email测试类jar,放到linux上运行时报错: Error: A JNI error has occurred, please check your inst ...
- Long Wei information technology development Limited by Share Ltd interview summary.
Long Wei information technology development Limited by Share Ltd interview summary. I take part in c ...
- 基于NFS实现多WEB服务器负载均衡
实现环境: 实现原理: 共四台服务器 A,B,C,D 服务器A (CentOS 6.7): IP地址: 192.168.3.67 角色: DNS服务 说明: 为两台web服务器做域名轮询 服务器B,C ...
- ZT ANDROID jni 中的事件回调机制JNIenv的使用 2012-09-10 12:53:01
ANDROID jni 中的事件回调机制JNIenv的使用 2012-09-10 12:53:01 分类: 嵌入式 android framework 里java调用native,使用JNI机制,ja ...
- 使用react-redux开发的简单步骤
一.安装相关包 npm install redux react-redux --save 二.根据具体情形创建模块文件 Store.js.Reducer.js.Actions.js Store.js的 ...
- HandyJSON代码阅读
功能:model = modelType.transform(rawdata) 使用分析: 使用机制:继承+实现配置+使用: 需要自己实现什么? 设计分析: 工具模块?机制模块?model基类? 生成 ...
- UVa 1636 - Headshot(概率)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- [转] 从此不再惧怕URI编码:JavaScript及C# URI编码详解
混乱的URI编码 JavaScript中编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码主要方法:HttpUtility.UrlEncode.Serv ...
- 启用 DHCP
#开启DHCP协议 Get-NetIPInterface -Dhcp Disabled|Set-NetIPInterface -Dhcp Enabled #开启本机上所有博通网卡的DHCP Get-W ...
- halcon 分水领域法详解(转载)
寻思自己写了的,但是这个大佬写的太好了,感谢Y忍冬草_ http://blog.csdn.net/y363703390 https://blog.csdn.net/y363703390/article ...