首页 >> 大全

Linux系统编程之进程(个人理解总结)

2023-10-17 大全 31 作者:考证青年

本文中的章节都是以疑问句的形式记录,也是希望大家带着问题来学习、总结进程相关知识。说不定会在以后的面试中会被问到。

文章目录 六、几种特殊进程七、exec*族函数八、函数九、poen函数

一、什么是程序,进程?(面试)

程序:就是一些指令和数据的集合是一个静态的概念。

进程:简单来说就是运行中的程序,是一个动态的概念。

二、什么是进程标识符?(面试)

每个进程都有自己唯一的非负整数来表示进程称为进程标识符。

三、如何查看系统中有哪些进程?

1.ps -aux

四、c程序的存储空间是如何分配的?(面试)

五、创建子进程 1.fork()

#include
#include 
#include 
#include
int main()
{pid_t pid;int data=0;pid=fork();while(1){if(pid==0){printf("this is child process!my pid=%d\n",getpid());}else if(pid>0){printf("this is parent proscess!my pid=%d\n",getpid());}}return 0;
}

2.fork()创建的子进程数据情况

由fork()创建的子进程,是父进程的副本。子进程拥有父进程的数据空间,堆,栈的一份拷贝,但父子进程不共享这部分空间。

#include
#include 
#include 
#include
int main()
{pid_t pid;int data=0;pid=fork();printf("before fork data = %d\n",data);if(pid==0){printf("this is child process!my pid=%d\n",getpid());printf("data in child process = %d\n",data);}else if(pid>0){printf("this is parent proscess!my pid=%d\n",getpid());data++;printf("data in parent process = %d\n",data);	}return 0;
}

3.vfork()创建子进程的数据情况

vfork创建的父子进程,共享数据空间,且父进程等待子进程运行完,所以子进程结束需要调用exit()函数不然父进程不知道子进程退出与否,还一直等。

#include
#include 
#include 
#include
int main()
{pid_t pid;int data=0;pid=vfork();printf("before fork data = %d\n",data);if(pid==0){printf("data in child process = %d\n",data);data++;printf("this is child process!my pid=%d\n",getpid());sleep(1);exit(1);}else if(pid>0){sleep(1);printf("this is parent proscess!my pid=%d\n",getpid());printf("data in parent process = %d\n",data);	}return 0;
}

4.fork()创建子进程的目的?

1.通常在网络服务进程经常会使用到,父进程等待客户端的请求,当请求到达时,使用fork()与客户端进行对接。当再来一个对接信号时,再fork()

2.一个进程需要执行不同的程序时,使用fork()通常与exec*族函数配合使用

六、几种特殊进程

_linux系统编程有什么用_linux编程思想

1.进程0:也叫做交换进程()(内核态进程)

2.进程1:也叫做init进程(用户态进程)

3.僵尸进程:父进程不关心子进程的运行情况,wait(NULL)(有危害–容易导致崩溃)

4.孤儿进程:父进程先于子进程退出,被init进程收养。(无危害)

七、exec*族函数

execl(“文件路径”,“可执行文件名”,参数,NULL)

#include 
#include 
#include #include 
#include 
#include 
#include 
#include 
#include 
#include int main()
{pid_t pid;int data = 10;while(1){printf("please input a data\n");scanf("%d",&data);	if(data == 1){int fdSrc;			pid = fork();if(pid > 0){wait(NULL);}if(pid == 0){execl("./changData","changData","config.txt",NULL);}}else{printf("wait ,do nothing\n");}}return 0;
}

八、函数

#include 
#include 
#include #include 
#include 
#include 
#include 
#include 
#include 
#include int main()
{pid_t pid;int data = 10;while(1){printf("please input a data\n");scanf("%d",&data);	if(data == 1){int fdSrc;			pid = fork();if(pid > 0){wait(NULL);}if(pid == 0){//				execl("./changData","changData","config.txt",NULL);system("./changData config.txt");}}else{printf("wait ,do nothing\n");}}return 0;
}

九、poen函数

poen比在应用中的好处:

可以获取运行的输出结果

#include 
#include 
#include 
//int execl(const char *path, const char *arg, ...);
//size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
int main(void)
{char ret[1024] = {0};FILE *fp;fp = popen("ps","r");int nread = fread(ret,1,1024,fp);	printf("read ret %d byte, ret=%s\n",nread,ret);return 0;
}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了