Linux学习-1进程

Posted 逍的遥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习-1进程相关的知识,希望对你有一定的参考价值。

在Linux中,在一个程序的内部启动另外一个程序,从而创建一个新进程。

1.这个工作可以通过库函数system来完成。

#include<stdlib.h>

int system (const char *string);

system函数的作用是,运行以字符串参数形式的传递给他打命令并等待该命令完成。命令的执行情况就如同在shell中执行如下的命令:

$ sh -c string

如果无法启动shell来运行这个命令,system函数将返回错误码127,其他错误返回-1.

system.c

#include<stdlib.h>
#include<stdio.h>
int main()
{
    printf("Running upper with system\\n");
    system("./upper");
    printf("Done.\\n");
    exit(0);

}

编译gcc system.c -o system

执行时./system

此时会发现会执行upper程序。

 

2.创建进程底层接口exec。

exec系列函数由一组相关的函数组成,他们在进程的启动方式和程序参数的表达方式上各有不同。exec函数可以把当前进程替换为一个新进程。你可以使用exec函数将程序的执行从一个程序切换到另一个程序。

exec函数比system函数更有效,因为在新的程序启动后,原来的程序就不再运行了。

#include<unistd.h>

int execl(xxx);

int execlp(xxx);

int execle(xxx);

int execv(xxx);

int execvp(xxx);

int execve(xxx);                        

还是以upper程序为例:

exe_up.c    

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
    printf("runing with execlp\\n");
    execlp("./upper", "/upper", NULL);
    printf("down");
    exit(0);
}

 gcc exe_up.c -o exe_up

./exe_up

 

ps:

upper.c

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
    int ch;
    while( EOF != (ch=getchar()))
    {
        putchar(toupper(ch));
    }
    exit(0);    

}

 

gcc upper.c -o upper

 

 以上所有内容来自《Linux程序设计 第四版》

以上是关于Linux学习-1进程的主要内容,如果未能解决你的问题,请参考以下文章

线程学习知识点总结

linux c 退出进程的代码

linux c 退出进程的代码

linux学习:Nginx--常见功能配置片段与优化-06

代码片段:Shell脚本实现重复执行和多进程

Linux性能学习(2.2):内存_进程线程内存分配机制探究