写在前面:小生纯业余选手,开此博仅仅是为了积累,纯当笔记来用。如有看官光临小生博客,请不要相信我的代码就是正确的。如果您发现了错误也恳请耽误您一点时间,请您在下面指出来,不胜感激!
如果发现一些笔记的说法完全是错误的请建议我删除!
问题:
什么是进程?
程序与进程的区别是什么?
如何创建一个进程?
在操作系统的发展历程中,为了满足多任务操作,提出了进程的模型,进程就是正在被执行的程序,正在被执行的意思通过是否占用资源(资源包括内存资源,CPU资源)来描述。
Linux中可以通过system来创建一个进程(创建的新进程执行返回后才能继续执行原来的进程,注意进程的返回值、函数的返回值 );
可以通过popen(创建一个进程,同时创建了一个父子进程之间的管道)
可以通过exec系列函数来替换进程代码(替换当前代码空间中的代码,本身不创建新的进程)
可以通过调用fork来创建子进程(创建的到心得进程,copy父进程的代码,子进程与父进程轮流执行)。
Linux中与进程相关的shell指令有ps,pstree,top,kill
<span style="font-size:18px;">#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
int main()
{
/*
int r = system("ls -l");
printf("%d\n",getpid());
printf("%d\n",WEXITSTATUS(r));
//system("clear");
*/
/*
char buf[1024];
//FILE *f = popen("ls -l","r");
FILE *f = popen("gcc test.cpp","r");
int fd = fileno(f);
int r;
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
while( (r = read(fd,buf,1024)) >0 )
{
buf[r] = '\0';
printf("%s\n",buf);
}
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
close(fd);
pclose(f);
*/
//int r = execlp("ls","ls","-l",NULL);
int r = execl("systest","systest","-l",NULL);
printf("main:%d\n",r);
return 0;
}
</span>