1. 执行新程序

只列出几个常用的函数:

#include <unistd.h>
int execve(const char *path, char * const argv[], char * const envp[]);//envp[]为环境变量,可直接调用int execv(const char *path, char * const argv[]);//与execve()类似int execvp(const char * path, char * const argv[]);//path新程序的名称

  正常情况下,这些函数不会返回,因为进程的执行映像已经被替换,没有剖接收返回值的地方。若发生错误,则返回-1.
  新程序的进程保持了原来进程的进程ID、父进程ID、实际用户ID和用户组ID。同时,调用新程序后,原有的子进程的映像被替代,不再被执行。

2. 等待进程结束

#include <sys/types.h>
#include <wait.h>pid_t wait(int *statloc);
pid_t waitpid(pid_t pid, int *statloc, int options);/*参数statloc指向的变量存放子进程的退出码(int型),即从子进程main函数返回的值或子进程中exit函数的参数
*/

wait/waitpid有关宏定义:
  WIFEXITED(stat_val) : 子进程正常结束,该宏返回非零值;有异常,返回0
  WEXITSTATUS(stat_val) : 获取子进程的退出码

  由于stat_val的信息存储在其二进制,难以直接读取,故用宏来获取退出码。(子进程若exit(num), 则获取的退出码即num)

3. 进程ID

#include <sys/types.h>
#include <unistd.h>int setuid(uid_t uid);
int setgid(gid_t gid);

若进程具有root权限,则函数将实际用户ID、有效用户ID设置为uid;
若进程不具有root权限,但uid等于实际用户ID,则致敬有效用户ID设为uid;
若两个条件都不满足,函数调用是失败,返回 -1 .

只有超级用户进程才可以改变实际用户ID.内核对进程存取文件的许可权的检查,是通过检查进程的有效用户ID来实现的,所以普通用户可以通过暂时获得root权限来操作文件。

4. 实现shell过程中的操作

1)readline函数库

  调用该函数库可直接实现命令行方向键的使用、光标移动、自动补全、查看命令历史记录。

int main()
{char* input, shell_prompt[100];rl_bind_key('\t', rl_complete);for(;;) {snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024));input = readline(shell_prompt);if (!input)add_history(input);free(input);//数组不用后要释放,避免内存泄露}
}

2) vfork使用注意事项

  因为用vfork创建的子进程与父进程共享资源,包括堆栈区等数据,如果在子进程使用return结束进程,在进程结束后系统会回收该进程锁占用的资源,也就导致父进程在继续运行时之前所有资源都已“消失”,会发生段错误,而使用exit退出时,则是直接退出进程,不会进行资源的回收,所以不会出错。

3) Linux终端printf控制输出颜色及格式

格式:

printf(“\033[字背景颜色;字体颜色m字符串\033[0m” );

printf(“\033[41;32m字体背景是红色,字是绿色\033[0m\n”);

41是字背景颜色, 32是字体的颜色, 字体背景是红色,字是绿色是字符串. 后面的\033[0m是控制码.

颜色代码:

字背景颜色范围: 40--49                   字颜色: 30--3940: 黑                           30: 黑41: 红                           31: 红42: 绿                           32: 绿43: 黄                           33: 黄44: 蓝                           34: 蓝45: 紫                           35: 紫46: 深绿                         36: 深绿47: 白色                         37: 白色

ANSI控制码:

\033[0m 关闭所有属性
\033[1m 设置高亮度
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m – \033[37m 设置前景色
\033[40m – \033[47m 设置背景色
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\33[?25h 显示光标

友情链接:
http://blog.csdn.net/yi412/article/details/46867137
http://www.linuxidc.com/Linux/2011-03/32903.htm

进程控制 (二) Others相关推荐

  1. 进程控制(二)与linux下的自有服务

    一.进程动态信息查看top 第一部分 统计信息 [root@yunwei1 ~]# top top - 19:22:52 up 1:32, 2 users, load average: 0.00, 0 ...

  2. (王道408考研操作系统)第二章进程管理-第一节3:进程控制(配合Linux讲解)

    文章目录 一:如何实现进程控制 二:进程控制原语 (1)进程创建 A:概述 B:补充-Linux中的创建进程操作 ①:fork() ②:fork()相关问题 (2)进程终止 A:概述 B:补充-僵尸进 ...

  3. 进程控制(二)——minishell延续

    文章目录 进程控制的简单相关回顾 环境变量怎么读取的,如何由父进程让子进程拿到呢? minishell代码排错 为什么子进程获取不到父进程的环境变量呢? 程序替换不会替换父进程的环境变量? minis ...

  4. vbs结束进程代码_物联网学习教程—Linux系统编程之进程控制

    Linux系统编程之进程控制 一.结束进程 首先,我们回顾一下 C 语言中 continue, break, return 的作用: continue: 结束本次循环 break: 跳出整个循环,或跳 ...

  5. 【linux草鞋应用编程系列】_2_ 环境变量和进程控制

    一. 环境变量 应用程序在执行的时候,可能需要获取系统的环境变量,从而执行一些相应的操作. 在linux中有两种方法获取环境变量,分述如下. 1.通过main函数的参数获取环境变量 main函数的多种 ...

  6. linux系统进程控制实验报告,Linux进程控制实验报告.doc

    里奴性进程控制实验报告 实验名称: Linux进程控制 实验要求:一.编写一个Linux系统C程序,由父亲创建2个子进程,再由子进程各自从控制台接收一串字符串,保存在各自的全局字符串变量中,然后正常结 ...

  7. 计算机实验进程管理与虚拟机,虚拟机VMware进程控制实验.docx

    虚拟机VMware进程控制实验 实验6:进程控制操作 1.实验目的 1.了解进程的概念: 2.熟悉Linux的前台与后台进程控制操作: 3.掌握利用进程监控工具来维护系统的正常运行: 2.实验内容 1 ...

  8. 进程管理(二十二)—CFS调度器

    CFS是内核使用的一种调度器或调度类,它主要负责处理三种调度策略:SCHED_NORMAL.SCHED_BATCH和SCHED_IDLE.调度器的核心在挑选下一个运行的进程时有可能会遍历所有的调度类别 ...

  9. Linux——详解进程控制之等待

    进程等待是进程控制中非常重要的一环,这关系着多进程之间的联动. 目录 一.概念 二.wait 三.waitpid (一).  pid_t pid (二).  int* status ※ ①退出码 ②退 ...

最新文章

  1. Go 学习笔记(22)— 并发(01)[进程、线程、协程、并发和并行、goroutine 启动、goroutine 特点,runtime 包函数]
  2. 评估“不合格”!教育部暂停山东大学、复旦大学、南京师范大学部分硕士、博士学位授权点...
  3. Activity has leaked window that was originally added
  4. Java 集合系列(1): Collection架构
  5. 编码 Unicode utf-8
  6. 这个故事告诉你,拥有吃不胖的超能力就无忧无虑
  7. android 好用的工具,android studio 的几个好用的工具
  8. Python使用pycuda在GPU上并行处理批量判断素数
  9. 视觉SLAM十四讲学习笔记——第五讲--相机与图像
  10. html中滚动条属性设置
  11. 用HTML5做一个个人网站,此文仅展示个人主页界面。内附源代码下载地址
  12. 1994年联想大调整,杨元庆上位,能赚钱的“书呆子”倪光南却走了
  13. 英语词根词缀记忆法(全集)_你竟然还在用词根词缀背单词?智橡树英语教你音标和音节秒记法...
  14. Jenkins报错'Gradle build daemon disappeared unexpectedly'的问题解决
  15. Cutting Sticks
  16. 前端Vue简单编写一个幸运大转盘抽奖游戏
  17. 小程序记账项目源码-采用云开发
  18. 背景图片如何自适应屏幕
  19. Spring boot(web 组件,ORM 操作 MySQL,接口架构风格—RESTful,集成 Redis,集成 Dubbo,打包)
  20. 丁总路由器设置以及401联网

热门文章

  1. Zabbix监控多个JVM进程
  2. 选择排序和冒泡排序以及折半查找
  3. javascript 高级特性探讨A4-A5(call和原型.对象复制)
  4. WPF CanExecuteChanged
  5. deepin下Clion连接mysql_CLion如何添加依赖库 ? 需要把mysql/Connector c++放入 用cpp连接数据库...
  6. 查看 固态硬盘位置_3米防摔+人脸/指纹解锁:西数Armorlock移动固态硬盘
  7. python调用ffmpeg合并_用ffmpeg命令处理mp4剪切与合并
  8. 县级的图书馆计算机管理员,图书馆管理员的岗位职责
  9. ubantu下安装Nginx
  10. [转载]一句话插配置文件