Linux 多学习过程
1Linux流程概述
1.1进程标识
1.2进程的用户ID与组ID
进程执行过程中必须有类似于用户的身份,哪个用户就是该用户的身份,就是那个用户的组 可用getuid(),getgid();获得 进程还有有效用户ID和有效组ID,缺少的情况下,与真实ID同样,能够用geteuid(),getegid(); 文件权限有S的时候,有效ID是进程的全部者(创建者),否则有效ID就是程序的执行者,与真实ID同样
ps -aux查看全部用户进程的权限,cpu,和内存的使用情况
1.3进程的状态
1.4LInux下的进程结构
1.5LInux下的进程管理
2 进程的创建
2.1system函数
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
using namespace std;
int main(int argc,char *argv[]){char cmd[1024]="";for(int i=1;i<argc;i++){strcat(cmd,argv[i]);strcat(cmd," ");}puts(cmd);int ans;ans=system(cmd);printf("%x\n",ans);
}
用system调用其它可运行程序,并输入參数 输入比如: ./main ./my_add 当中my_add计算两个数之和
int main(int argc,char *argv[]){if(argc!=2){printf("failed\n");return 0;}int left,right;char cmd[1024]="";char line[1024]="";strcat(cmd,argv[1]);strcat(cmd," ");while(printf(">>"),scanf("%d %d",&left,&right)){memset(line,0,sizeof(line));sprintf(line,"%s %d %d",argv[1],left,right);strcpy(cmd,line);int ret;ret=system(cmd);printf("result:%d\n",ret/256);}
}
2.2fork函数
#include<iostream>
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int main(int argc,char *argv[]){pid_t pid;int i=3;printf("hello\n");pid=fork();fflush(stdout);//儿子复制的时候将缓冲区也复制了,假设没有这句话。上面的hello将出现两便if(pid>0){printf("parents:pid:%u,ret:%u,pp:%u\n",getpid(),pid,getppid());}else if(pid==0){
// sleep(5);printf("child:pid:%u,ret:%u,pp:%u\n",getpid(),pid,getppid());}printf("bye!\n");
}
2.3exec函数
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);
if(execl("/home/yang/0820/my_exec/","my_add","3","2",NULL)==-1){perror("execl error");}
int execlp(const char *file, const char *arg, ...);比如:
if(execlp("./my_add","my_add","fwef","fwe","fewgeraf",NULL)==-1){perror("execlp error");}
int execv(const char *path, char *const argv[]);比如:
char *args[10];args[0]="my_add";args[1]="12";args[2]="23";args[3]=NULL;if(execv("/home/yang/0820/my_exec/my_add",args)==-1){perror("execl:");}
2.4popen函数(以后补充)
popen函数类似system函数,与system不同之处在于它使用管道操作,
FILE*popen(const char *command, const char *type);
int pclose(FILE *stream);
command为可运行文件的全路径和运行參数。type可选參数为“r” 或“w”
假设type是“w”(即当前的程序的输出结果作为commend命令的输入),调用程序能够用fwrite想调用程序发送数据,而被调用的程序能够在自己的标准输入上读取这些数据
FILE *fp;
char a[1000];
char b[1000];
char cmd[1024]="";
printf("plseas write\n");
fgets(a,1000,stdin);
sprintf(cmd,"%s %s",argv[1],a);
fp=popen(cmd,"r");//这个指令cmd为可运行文件的全路经
fgets(b,1000,fp);
printf("%s\n",b);
新进程屏幕输出:
FILE *fp;
char a[1000];
gets(a);
fp=popen(argv[1],"w");
fputs(a,fp);
pclose(fp);
3.进程控制与终止
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main()
{pid_t pid = fork();if( pid == 0 ){exit(10);}else{sleep(10);}
}
避免僵尸进程样例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main()
{pid_t pid = fork();if( pid == 0 ){exit(10);}else{wait(NULL); //NULL表示等待全部进程sleep(10); //通常要将sleep放在wait的后面,要不然也会出现僵尸进程}
}
3.2进程的终止
exit和_exit函数的原型:
#include<stdlib.h> //exit的头文件
#include<unistd.h> //_exit的头文件
void exit(int status);
void_exit(int status);
status是一个整型的參数,能够利用这个參数传递进程结束是的状态。0表示正常退出,其它数表示出现错误,进程非正常结束
版权声明:本文博客原创文章,博客,未经同意,不得转载。
转载于:https://www.cnblogs.com/yxwkf/p/4674671.html
Linux 多学习过程相关推荐
- Linux嵌入式学习过程
Linux嵌入式学习过程 循序渐进学习嵌入式开发技术 一.练好基本功 二.嵌入式Linux应用开发 误区一.全身投入学习桌面或服务器版本linux系统 误区二.直接阅读linux内核源代码 如何正确的 ...
- 关于linux指令学习过程中的疑惑
问题描述:用usermod -l urchin test修改用户名之后用cat /etc/passwd查看test已经修改成urchin了,但是用ls /home查看还是test usermod -l ...
- 只要有热情和方法就能学好Linux
学习大多都是从低到高的,就像爬山一样,你不能什么准备都没有就往上爬,那样失败的风险会很高,所以在学习一门技术之前必须要有方法加持.无论是学习前端后端还是学习Linux,都需要方法,如果没有方法的话,那 ...
- 关于Linux 是怎么来的,该如何去学
PS: 半路出家,使用linux几个月,也只知道一些基础命令,但是回过头去,发现对Linux知道的不是很多,断断续续的.于是就上网找了一些关于Linux 的内容看看.顺便记录一下,说不定以后还能给别人 ...
- Linux学习笔记(五)
参考书籍:linux就该这么学 5 用户身份与文件权限 5.1 用户身份与能力 强烈推荐大家在学习时使用 root 管理员权限!因为在 Linux 的学习过程中如果使用普通用户身份进行操作,则在配置服 ...
- Linux 基础知识系列第一篇
精选30+云产品,助力企业轻松上云!>>> Linux 01 今日学习目标 [x] Linux系统的认识以及部署安装 [x] 认识Linux文件系统结构 [x] 实际操作文件和文件夹 ...
- 一、Linux必知学习资料
一.Linux必知学习资料 文章目录 一.Linux必知学习资料 1.前言 2.学习Linux要爬的坡 3.必备网站 1.前言 我们大多数人都觉得 Linux 操作系统刚开始学起来很难,主要是因为我们 ...
- 电脑小白自学linux,Linux小小白的学习经历那点事
不知道大家知不知道Linux,或者说对于Linux了解有多少,曾经的我连计算机都不会操作,更别说Linux系统了,可以说完全是一个小白,上了大学后才知道原来电脑除了Windows系统外还有别的,而且用 ...
- 鸟哥的Linux私房菜基础篇第三版 -- 目录
服务器端使用的OS,Linux是最最常用的,所以,日常的部署.排查问题,就不可避免的与Linux打交道,日积月累,对Linux就有了多多少少的了解. 反过来,再系统的从头开始,读一本关于Linux基础 ...
最新文章
- 解决mysqlAccess denied for user'root'@'IP地址'问题
- Windows内核实验002 中断现场
- 剑网三缘起应老玩家要求调整规则,几分钟就能搞定,获得足够声望
- saltstack配置apache
- 最佳 开源 人脸识别算法_开源项目的最佳社会结构是什么?
- 虚伪,不只是形容一个人
- 有java基础学python-零基础应该选择学习 java、php、前端 还是 python?
- 《自己动手写操作系统》 第一章总结
- 机器人时代已来!推荐几本机器人学硬核好书
- 美区id无法登陆解决方法
- django的ORM常用字段和参数
- Codeforces1538G Gift Set (三分)
- 2020年,最优秀的大数据公司有哪些?
- ICCV2021 | TransFER:使用Transformer学习关系感知的面部表情表征
- #一日一图#一周汇总
- maven手工安装依赖包
- 常用二极管,三极管参数
- 荣耀android手机怎么截图,华为荣耀畅玩5C怎么截图/截屏方法教程
- 离散数学与组合数学-05树
- 得利捷发布全新自助购物伴侣 JOYA TOUCH 22
热门文章
- php开发环境 ubuntu,Ubuntu配置PHP开发环境
- matplotlib 散点图_matplotlib画图 绘制散点图案例
- 三、PHP基础——HTTP协议 文件编程
- 三、Vue组件化开发学习笔记——组件化的基本步骤、全局组件和局部组件、父组件和子组件、注册组件的语法糖、模板分离写法、组件的数据存放
- 大数据技术 思维导图
- LeetCode MySQL 534. 游戏玩法分析 III
- LeetCode 1457. 二叉树中的伪回文路径(位运算+递归)
- 剑指Offer - 面试题10- II. 青蛙跳台阶问题
- LeetCode 82. 删除排序链表中的重复元素 II(链表)
- LeetCode 437. 路径总和 III(双重递归)