一、进程的退出: exit(3)  _exit(2)  atexit(3)  onexit(3)

二、进程资源的回收:wait(2) waitpid(2)

三、加载新的可执行程序:  exec函数族

execve:创建一个新的进程 代替调用进程。进程的pid保持不变。

bash 有内部命令(调用函数,一个可执行程序)和外部命令(和bash不是一个可执行程序)之分。

bash 调用fork产生子进程,在子地址空间里加载新的印象。

如何查看一个命令是哪部命令还是外部命令?type 命令

[orange@chengziiandeAir:$ type cd

cd is a shell builtin

使用system(3)启动新的可执行程序

system和exec的区别

bash——a.out——a.out——sh——myt

bash——a.out——myt

 四、环境变量

1.打印环境变量,bash 中是env命令。

 #include<stdio.h>

 int main(void){
extern char ** environ;
int i =; while(*(environ+)!=NULL){
printf("%s\n",*(environ+i));
i++ ;
}
return ;
}

c语言打印出环境变量

main 函数的最完整的格式:

    int main (int argc,const char *  argv[ ], char * envp[ ] ) ; //从命令行传参数

int main (void) //就不用去检测后面的参数了

        从 start调用main之前,就已经有这个栈 ,参数列表的内容就已经在栈里面了。调用的时候直接使用就行了。

 #include<stdio.h>

 int main( int argc, char * argv[],char * envp[]) {

   int i=;
for(;envp[]!=NULL;i++){
printf("%s\n",envp[i] ) ; } return ; }

main的第三个参数

2.操作环境变量的函数

getenv(3) 获取环境变量的值

头文件:#include<stdlib.h>

表达式:char * getenv( const char * name);

参数:  名字

返回值: returns a pointer to the value in the environment,or NULL(if there is  no match);

     返回环境变量值的首地址。

 #include<stdio.h>
#include<stdlib.h> int main(void){ printf(" %s\n",getenv("UID) ); return ;
}

putenv  (3) 改变或者增加一个环境变量的值  

头文件: #include<stdlib.h>

表达式:int putenv(char *string)

参数:string: name=value

返回值:0代表成功

注意:用env看不到,用a.out能看得到。因为是增加到自己所在的进程中去的。

setenv

putenv("name=orange");

setenv("name","orange",0);  //0:已有就不会改变 ; 1:已有也要改变

unsetenv("name");

clearenv();

五、文件输出重定向

 #include<stdio.h>

 int main(void){
int ch;
if(ch=getchar()) !EOF) //文件的尾部; control d= EOF
//getchar相等于 getc(stdin)
putchar(topper(ch)) ; //转换字符为大写
//把0关闭,再打开一个文件时,最小的文件描述符被使用
return ;
} ------------------------------------------------
int main(int arc,char * argv[]){
int fd; fd=open(argv[],O_REONLY);
if(fd==-){
perror("open");
return ;
}
dup2(fd,STDIN_FILENO);
close(fd);
return ;
excel("./upper","upper",NULL); }

本来为从键盘中读,变为从文件里读。

六、其他

文件夹的操作:opendir/closedir/readdir

文件重定向的实现原理:dup/dup2

文件锁:fcntl(2)

库函数和系统调用的关系:缓冲文件和非缓冲文件

定时器:

进程:内存中的代码和数据。每个进程都有自己的pid和pcb。

所有的用户级进程形成了一棵树,所有的用户级进程形成了一棵树。如何查看这颗树?pstree, init(pid是1号)是用户级进程的第一个进程。

使用 系统调用fork(2)创建新进程

    

如何查看进程的相关信息 ps -aux

线程:执行代码的过程。

缺省的情况下,进程的主线程的线程过程函数就是main函数。

main 函数的返回值即进程的退出码。

孤儿进程:

信号:

信号函数:

信号屏蔽:

可靠信号和不可靠信号:

pid:

计时信息:

最新文章

  1. 茂名石化BPM应用实践 ——业务协同及服务共享平台建设和应用
  2. 织梦建站:视频弹出播放JS+CSS
  3. typedef和#define的用法与区别
  4. step6-----&gt;往工程中添加spring boot项目-------&gt;修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework
  5. centos安装firefox flash插件
  6. [.NET] 使用C#开发SQL Function来提供服务 - 简讯发送
  7. 华为OJ: 公共字符串计算
  8. 高并发场景之RabbitMQ篇
  9. python中的time模块
  10. 用 k8s 管理机密信息 - 每天5分钟玩转 Docker 容器技术(155)
  11. Linux命令学习: grep命令
  12. keycode简记表
  13. vue-详情列表偷懒遍历
  14. LG3211 [HNOI2011]XOR和路径
  15. vue路由的配置
  16. xml的解析方式的简介
  17. js实现鼠标拖动框选元素小狗
  18. 读取图片列表——CNN输入
  19. abp 嵌入资源(视图、css、js)的访问
  20. HDU 4438 Hunters

热门文章

  1. Android studio下载慢解决,使用阿里云解决(转)
  2. HATEOAS
  3. ucore-lab1-练习6report
  4. python的os模块fnmatch模块介绍
  5. [leetcode]66. Plus One加一
  6. odoo 配置文件
  7. java_25 FileReader类和FileWriter类
  8. ios OC 关键字 copy,strong,weak,assign的区别
  9. Win10下windows mobile设备中心连接不上的方法无法启动
  10. java 小数转换成二进制