进程控制 (二) Others

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转载】ACM中矩阵乘法的应用

copied from 大神s blog 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中&#xff0c;一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵&#xff0c;得到的结果是一个n行p列的矩阵&#xff0c;其中的第i行第j列位置上的数等于前一…

线程控制(一)

1. 线程执行顺序问题 #include <stdio.h> #include <string.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h>void *thread1(void *); void *thread2(void *);pthread_key_t key;void *thread1(void *arg){int a 1, *tsd &a…

Codeforces Round #324 (Div. 2) B. Kolya and Tanya

思路&#xff1a;因为题目说只要存在组ai??ai??n??ai??2n?≠?6就令人满意&#xff0c;也就是不满意的情况就是所有ai??ai??n??ai??2n?都等于6那就用所有的情况减去不满意的情况&#xff0c;总结: 直接用二分幂不知道为什么wa的要死&#xff0c;看到别人的题…

拓扑排序的题目集合

【HDU】1285确定比赛名次2094产生冠军2647Reward3342Legal or Not1811Rank of Tetris 拓扑并查集3231 Box Relations 三维拓扑【POJ】1094 Sorting It All Out Floyd拓扑2367 Genealogical tree3660 Cow Contest3687 Labeling Balls 神奇的拓扑1128Frame Stacking DFS版拓扑…

edward_mj退役经验帖

考完试了&#xff0c;也是时候补上退役帖了。考虑了一阵要怎么写&#xff0c;鉴于本文的目的主要是希望给后来的校队成员或者想参加这个竞赛的同学一个借鉴&#xff0c;最后还是决定用Q&A的形式。打ACM/ICPC有什么好处我觉得确切而言应该问把时间花在这上面有什么好处。提升…

C++学习笔记(一)

本文主要内容为C下的输入输出函数以及for循环中的C11新特性。 一、输入输出函数 1. cin cin 遇到 空格、回车、Tab结束输入&#xff0c; 且会将读到的空格、回车、Tab 丢弃&#xff0c;例&#xff1a; #include<iostream> using namespace std;int main(void) {char a…

为了更好——关于博客搬迁的说明

一开始没准备在网易安家的&#xff0c;可是由于博客和邮箱都在此处&#xff0c;访问会更加方便&#xff08;所以就稀里糊涂在这里安了家&#xff09;&#xff0c;但是后来发现网易的博客对用户并不友好&#xff08;广告低栏的注册&#xff09;&#xff0c;寻寻觅觅找了很多博客…

C++学习笔记(二)

本文将主要介绍const关键字的使用。 首先&#xff0c;说一下const是什么&#xff1a; const修饰的数据类型是指常类型&#xff0c;常类型的变量或对象的值是不能被更新的。 然后&#xff0c;我们来看一下这四处声明&#xff1a; const int a 1; //code1 const int *p &am…

关于Github的那点事儿

今天突然发现无法从本地git push到远程仓库了&#xff08;然而事实是网有点卡&#xff0c;github官网没更新过来&#xff0c;然而……ssh-key已经删了….&#xff09;&#xff0c;所以又重新添加ssh-key。 ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub 将显示的内容粘贴到github…

C++学习笔记(三)

1. 引用变量 引用是已定义变量的别名&#xff0c;若使用int & x a;&#xff0c;即将x作为a的引用&#xff0c;其中的&不是地址运算符&#xff0c;而是类型标识符的一部分。事实上&#xff0c;x与a指向的是同一块内存空间&#xff0c;对x进行操作即对a进行操作。必须在…

Rabbits —— HDU-6227

题意&#xff1a; 有n只兔子在不同的位置&#xff0c;任意一只兔子可以跳到其余任两只兔子&#xff08;必须保证它们中间有空位&#xff09;中间&#xff0c;问最多可移动多少次&#xff1f; 思路&#xff1a; 可看作从任一侧的兔子向中间插空&#xff0c;因此可以将所有兔子…

uva 10570——Meeting with Aliens

题意&#xff1a;输入1-n的排列&#xff0c;每次可以交换两个整数。用最少的次数把排列变成1-n的环状序列。 思路&#xff1a;枚举贪心。依次枚举环上所有的点&#xff0c;正序一遍&#xff0c;倒序一遍&#xff0c;然后贪心求的所需的最小步数&#xff08;贪心策略是1与1号交换…

I/O复用之 epoll

epoll 系统调用 1. 内核事件表 epoll使用一系列函数来完成任务&#xff0c;把用户关心的文件描述符中的事件放到内核里的一个事件表中&#xff0c;因此不用像select、poll那样每次调用都要重复传入文件描述符集或事件表。epoll需要一个文件描述符来唯一标识该事件表&#xff0…

uva 1153—— Keep the Customer Satisfied

题意&#xff1a;有n个工作&#xff0c;已知每个工作的开始时间和结束时间&#xff0c;问最多能完成多少工作。 思路&#xff1a;贪心。要想使得最后的结果最佳&#xff0c;那么开始的晚的&#xff0c;要在最后来做。在此基础上&#xff0c;需要保证先做开始的早的&#xff08;…

I/O复用之 EPOLLONESHOT 事件

EPOLLONESHOT 事件 EPOLLONESHOT 事件 1. 使用EPOLLONESHOT的原因及优点2. recv返回值 及 与errno的配合使用3. 示例程序 1. 使用EPOLLONESHOT的原因及优点 即使使用ET模式&#xff0c;一个socket上的某个事件还是可能被触发多次。比如&#xff1a;一个线程在读取完某个sock…

uva 1612——Guess

题意&#xff1a;有n个选手参加比赛&#xff0c;比赛有3个题目&#xff0c;每个选手每个题目都有一个评测之前的于得分&#xff0c;当通过题目时才可以得到相应分数&#xff0c;否则为0&#xff0c;然后按照得分排名&#xff0c;id小的排在前面&#xff0c;现在给定选手的于得分…

uva 1611——Crane

题意&#xff1a;给定一个1-n的排序&#xff0c;每次可以选定一个偶数长的序列&#xff0c;然后交换前一部分和后一部分&#xff0c;使得最后的成为1-n的序列。求最后的次数和每次的策略。 思路&#xff1a;贪心。每次贪心的策略都是把i放到第i位置上&#xff0c;交换的时候找到…

【世界上最美丽的7张太阳照片】

【世界上最美丽的&#xff17;张太阳照片】 文章来源:http://ms.blogger.cn/peon/posts/1634.aspx转载于:https://www.cnblogs.com/paulzhu/archive/2004/02/24/1572.html

uva 11925——Generating Permutations

题意&#xff1a;给定一个1-n的排列&#xff0c;用不超过2*n2的操作把他变成升序。每次操作只有两种&#xff0c;一种是交换前两个元素&#xff0c;另外一种是把最后一个元素放到最后一位。 思路&#xff1a;贪心。用双端队列来保存数据&#xff0c;每次当v[0]>v[1]&&am…

二维map —— HDU1263

水果 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8752 Accepted Submission(s): 3482Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最…