【操作系统---12】进程控制拓展

文章目录

    • SHELL传送门:
    • 封装fork/wait等操作:
      • 代码实现:
      • 代码运行测试图:
    • popen函数:
    • system函数:


SHELL传送门:

简易shell的实现(无任何容错机制)


封装fork/wait等操作:

代码实现:

execv 第一个参数是程序路径,之后参数使用字符串指针数组

int execvp(const char *file, char *const argv[]);

带p不需要提供加载程序的路径

#include
#include
#include
#include
#include
#include

void ProcessCreate( int(*func)(), char* file,char* argv[])
{
	    pid_t pid=fork();
	    
	    if(pid==-1)
	    {
			perror("fork error");
			return;
	    }
	    else if(pid==0)
	    {
			int a=func(file,argv);

			if(a==-1)
			{
			    printf("调用失败!");
			    return;
			}
	    }
	    else
	    {
			wait(NULL);
	    }
}

int main()
{
	    char* argv1[]={"ls"};
	    char* argv2[] = {"ls", "-al","/home/luzihan/testspace", 0};
	    
	    ProcessCreate(execvp,*argv1,argv2);
}

代码运行测试图:

【操作系统---12】进程控制拓展_第1张图片


popen函数:

		头文件-----#include 

  	 	FILE *popen(const char *command, const char *type);

  		int pclose(FILE *stream);

popen应用于执行shell命令,并读取此命令的返值,或者与执行的命令进行交互

popen是不堵塞的,不会等待子进程的结束并杀死子进程,即不会管理进程.需要我们手动杀死或忽略子进程等操作

返回值:若成功则返回文件指针,否则返回NULL


system函数:

	 头文件-----#include 

  	 int system(const char *command);

system是堵塞的,会自动对进程进行管理,无需我们再去对进程进行管理

返回值:成功就返回执行命令的状态,失败就返回-1

功能:简化exec函数的使用


你可能感兴趣的:(操作系统)