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内核学习笔记二——进程 一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...
随机推荐
- TC9.0新增实用接口,用AutoHotkey获取当前选中文件等信息
TC9.0的history.txt里有几行更新说明(见文章末尾),可以用SendMessage命令获取信息, 消息号是WM_USER+50(即1074),wParam则是更新说明里的内容, 下面是我简 ...
- February 13 2017 Week 7 Monday
Don't trouble trouble until trouble troubles you. 不要自寻烦恼. It is the best way to live an easy life if ...
- ZT 为什么pthread_cond_t要和pthread_mutex_t同时使用 || pthread/Linux多线程编程
为什么线程同步的时候pthread_cond_t要和pthread_mutex_t同时使用 (2009-10-27 11:07:23) 转载▼ 标签: 杂谈 分类: 计算机 举一个例子(http:// ...
- LINQPad 编译调试C#代码的工具推荐
LinqPad介绍 学习C#代码的好帮手,很容易调试C#代码片段. LINQPad 4 支持.NET Framework 4.0 / 4.5 ,专业调试LINQ,lambda等特性,完全取代Snipp ...
- jq实现随机显示部分图片在页面上(兼容IE5)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 阶&原根
求阶的方法: 根据性质2,直接对ϕ(m)求出因子即可,从小到大依次判断是不是符合ad = 1(mod m)(d是ϕ(m)的因子) 求最小的原根的方法: 根据性质8,对ϕ(m)求出素因子,从1开始不断测 ...
- shell脚本中针对sudo等密码输入的问题解决方案
一.不希望手动输入的办法 1.安装expect工具:sudo apt-get install tcl tk expect 2.脚本文件内容如下: #! /usr/bin/expectspawn sud ...
- BZOJ2438:[中山市选2011]杀人游戏(强连通分量)
Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人 进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是 ...
- BZOJ2882:工艺(SAM)
Description 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工 ...
- Educational Codeforces Round 56 (Rated for Div. 2) D. Beautiful Graph 【规律 && DFS】
传送门:http://codeforces.com/contest/1093/problem/D D. Beautiful Graph time limit per test 2 seconds me ...