1、获取进程的id

int main0()
{printf ("当前进程 ID %d\n",  getpid());printf ("当前父进程:%d\n", getppid());printf ("当前用户:  %d\n",  getuid());while (1);return 0;
}

2、fork 和 vfork之前的博客里有,这里就不啰嗦了

// fork
int main1()
{// fork : 创建一个子进程// 如果创建失败,返回-1// 成功返回两个值,如果是在父进程,返回子进程的ID// 如果是在子进程,返回值是0pid_t pid = fork();if (-1 == pid){perror ("fork");return -1;}if (pid > 0)                // 父进程{printf ("我是父进程,pid = %d\n", getpid());}else                        // 子进程{printf ("我是子进程,pid = %d\n", getpid());}while (1);return 0;}// fork1   父进程和子进程是异步的,输出都是1
int main2()
{int count = 0;pid_t pid = fork();count++;printf ("count = %d\n", count);return 0;
}// fork2    会产生8个进程
int main3()
{fork();fork();fork();printf ("a\n");while (1);return 0;
}// fork3    产生20个进程
int main4()
{fork();                         // 产生2个进程fork() && fork() || fork();     // 之前的每个进程都会产生5个进程fork();                         // 翻倍printf ("a\n");while (1);return 0;}// 1、vfork 的子进程必须要显示调用 exit();
// 2、vfork 子进程和父进程共享数据段
// 3、vfork 的子进程先于父进程执行,子进程执行完,CPU才能调度到父进程
int main5()
{int count = 0;pid_t pid = vfork();if (pid < 0){perror ("vfork");return -1;}count++;if (pid > 0)                    // 父进程{printf ("我是父进程,pid = %d  count = %d\n", getpid(), count);}else                            // 子进程{printf ("我是子进程:pid = %d  count = %d\n", getpid(), count);while (1);exit  (0);}return 0;
}

3、exec函数族

// execl  格式:int execl(const char * path, const char* arg1,...)
int main6()
{// 第一个参数需要一个路径,能够找到需要执行的文件// 后面的参数表明执行的方式,和在终端方式类似,如果程序执行需要// 其他的参数 ls -l,参数要作为函数的实参传过去// 最后需要补一个 NULLint ret = execl ("/bin/ls", "ls", NULL);if (-1 == ret){perror ("exexl");return -1;}   return 0;
}int main7()
{// 产生一个新的程序,替换了原有的程序,原有的进程 id 是不变的// int ret = execl ("bin/ls", "ls", "-l", NULL);int ret = execl ("/bin/ps", "ps", "-ef", NULL);if (-1 == ret){perror ("execl");return -1;}printf ("aaaaaaaaaaaaaaaaaaaaaaaaaaaa\n");return 0;
}// execv    格式:int execv(const char * path, const char *argv[])
int main8()
{char* a[] = {"file.c", NULL};int ret = execv("file", a);if (-1 == ret){perror ("execl");return -1;}return 0;
}// execlp   格式:int execlp(const char * path, const char* arg1,...)
int main9()
{int ret = execlp ("./file", "file", NULL);if (-1 == ret){perror ("execl");return -1;}return 0;
}int main10()
{int ret = execlp ("ls", "ls", "-l", NULL);if (-1 == ret){perror ("execl");return -1;}printf ("aaaaaaaaaaaaaaaaaaaaaaaaaaaa\n");return 0;
}// system
int main11()
{printf ("请选择文件:\n");system ("ls /home");char str[100];while (1){fgets (str, 100, stdin);printf ("[root@promote 15]# ");system (str);}return 0;
}int main12()
{printf ("hello world\n");sleep (1);// 在内部fork()一个子进程,调用 /bin/sh -c string来执行system ("ps -ef | grep a.out");printf ("aaaaaaaaaaaaaaaaaaaaaaaaaaaa\n");return 0;
}

4、进程的终止

// 进程退出
void func()
{printf ("33333333333333333333333\n");exit (0);       // 进程终止
}int main13()
{printf ("hello\n");printf ("1111111111111111");// 在停止进程前,要检查文件的打开情况,并把文件缓冲区中// 的内容写回文件才停止进程exit (0);return 0;
}int main14()
{printf ("hello\n");printf ("11111111111111111");// _exit:直接使进程停止,清除其使用的内存,并清除缓冲区中内容_exit (0);return 0;
}

进程控制常用的一些操作相关推荐

  1. 操作系统第二次试验:进程控制试验

    操作系统第二次试验:进程控制试验 前言 实验目的 试验环境 实验内容及步骤 1:练习编写以下实例,来分析和理解Linux中进程的状态转换: 2.(选做)在Linux下,分析程序的功能与运行结果,熟悉L ...

  2. teamviewer企业版 添加计算机,teamviewer添加常用控制电脑列表的操作步骤

    最近有不少的teamviewer用户们,会询问小编怎么teamviewer今日在这篇文章内小编就为你们带来了teamviewer添加常用控制电脑列表的操作步骤. teamviewer添加常用控制电脑列 ...

  3. linux进程操作相关函数,Linux进程控制简介与要素及相关函数详解

    进程是操作系统中的一个重要概念,它是一个程序的一次执行过程,程序是进程的一种静态描述,系统中运行的每一个程序都是在它的进程中运行的. 进程4要素 要有一段程序供该进程运行 进程专用的系统堆栈空间 进程 ...

  4. 进程控制(2):进程操作

    前言: 关于进程控制这块的好文很多,下面转载的这篇内容很丰富,也会举适当的栗子,与其写的一知半解不如参读学习别人的优秀博文,感谢原作,本系列摘录自:https://www.cnblogs.com/xi ...

  5. c语言进程控制实验报告,操作系统进程的创建与控制实验报告.doc

    操作系统实验报告 实验一 进程的创建和控制 班 级: 12计算机12班 学 号: 127401219 姓 名: 刘艳仙 成 绩: 2013年 实验目的 1.掌握进程的概念,明确进程的含义 2.复习C语 ...

  6. Linux系统状态检测及进程控制--2

    Linux系统状态检测及进程控制--1(http://crushlinux.blog.51cto.com/2663646/836481) 4.僵死(进程已终止,但进程描述符存在,直到父进程调用wait ...

  7. 模拟进程创建、终止、阻塞、唤醒原语_操作系统基础8-进程及进程控制

    进程(Process) 的定义 从不同的角度,进程可以有不同的定义,传统典型的定义: 进程是程序的一次执行过程. 或者:一个正在执行的程序的实例 进程是一个程序及其数据在处理机上顺序执行所发生的活动 ...

  8. Mysql常用基础命令操作实战

    目录 一    启动与关闭MySQL    3 1.1    单实例MySQL启动与关闭方法    3 ※1※    常规启动关闭数据库方式(推荐)    3 1.2    多实例MySQL启动与关闭 ...

  9. C#和C常用的API操作窗口的代码积累

    C#和C常用的API操作窗口的代码积累 IntPtr awin = MouseHookHelper.FindWindow("WeChatMainWndForPC", "微 ...

最新文章

  1. python培训比较好的机构-学Python去哪家培训机构比较好?
  2. 访问tomcat manager应用遇到的403 access denied错误
  3. 多个圆点,鼠标选取两个,求两个点的距离,用于计算像素尺寸(halcon实现)
  4. springboot2——MyBatis入门
  5. java杰森_java - 杰森格式错误,当他已经得到一个数组时询问 - 堆栈内存溢出
  6. linux刷脚本需要什么工具吗,利用宝塔Linux一键挂载脚本工具挂载www目录方法
  7. 采用UltraISO软碟通制作Dos启动盘教程
  8. linux里的.mht是什么文件,mht文件扩展名,mht文件怎么打开?
  9. MySQL局域网连接失败问题解决
  10. web3d-手机产品展示_onePlus6
  11. 一种用于NDN的安全的链路状态路由协议
  12. web前端(1)——了解什么是前端,以及与后端的关系
  13. Turing GPU将如何彻底改变沉浸式AI
  14. SIM卡交换方案的工作原理
  15. 为什么嫁人要嫁IT男?
  16. RoboMaster电控学习笔记——电机控制(1-CAN)
  17. 【逻辑位移和算数位移】
  18. linux上的字典和数组中,centos安装词典——图形界面的和命令行
  19. matlab 四叶草,Matlab入门教程 第七章 Simulink 基础
  20. 图像识别AI遇上对抗性图像变“瞎子”,准确率猛降90%

热门文章

  1. go-mysql查询单条数据_Golang 从 MySQL 数据库读取一条数据
  2. properties(map)增.删.改.查.遍历
  3. matlab usb cam,Matlab环境下使用USB2.0摄像头编程image acquisition tools(读书笔记) | 学步园...
  4. redis——数据结构(整数集合,压缩列表)
  5. 剑指offer_04
  6. 《剑指Offer》24:反转链表
  7. 英语口语 week11 Friday
  8. HEVC/H265 文档获得
  9. 浅谈 JavaScript、ECMAScript (ES5、ES6)是什么、相互关系
  10. 优雅的找出ArrayList中重复的元素