linux 函数执行,shell执行命令

这篇文章给大家聊聊关于linux 函数执行,以及shell执行命令对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

在linux中怎么运行脚本函数

首先脚本需要有执行权限 chmod u+x file.sh

执行脚本有三种方dao法:

1../file.sh

特点:开启1653bash子进程来版执行,也就是开权启额外的进程来进行,不影响原进程的变量、配置等

2. bash file.sh

特点:和./file.sh相同

3. source file.sh或者. file.sh

特点:在原bash进程中执行脚本。

第三种方法主要用于在脚本中切换用户su、切换目录cd等命令。

source和.命令是相同的。你可以搜索 source更详细的Linux命令介绍可看下图查询

如何在linux中编写一个类似CreateProcess的函数

CreateProcess函数可以创建一个新的进程并调用一个外部程序

并且它有很多参数可以设置新的进程相关的状态

如果只要想简单地完成创建一个进程并调用一个外部程序的话

在linux上可以使用fork或者clone来进行创建进程

然后使用exec族函数来调用一个外部程序

一个简单的实现大概是这样的

intcreate_procress(constchar*path,constchar*name,constchar*arg)

{

pid_tpid;

pid=fork();

if(pid==0)

{

if(execl(path,name,arg,NULL)==-1)

{

perror(path);

_exit(-1);

}

}

elseif(pid==-1)

return-1;

return0;

}

参数path为执行外部程序的路径

name为运行程序的名称(argv[0])

arg为命令行参数(从argv[1]开始)

如果对新进程有其它需求的话比如设置环境变量等可以使用execle等进行扩展

或者其它的要求也可以使用linux提供的相应api在fork后进行设置

Linux system 函数

最近工作中在 Linux下,某些指定的程序需要调用指定的 shell脚本完成指定工作,以前也曾经做过类似的功能,调用 system函数执行指定的脚本,以前并不关心 shell脚本是否执行成功了,现在的功能需要根据 shell脚本执行成功与否,于是查询了下 system函数的说明,有此文以做笔记之用。

功能:调用/bin/sh-c执行指定的脚本 command

常规使用方法:

关于返回值:

答案是都错

man手册

看着挺晕的,但是如果对于 system的执行过程了解的话,就很容易理解了,函数执行分为以下几个阶段。

阶段1:创建子进程等准备工作。如果失败,返回-1

阶段2:调用/bin/sh拉起脚本,如果拉起失败或者shell未正常执行,原因值被写入ret中

阶段3:如果 shell脚本执行成功, shell脚本的返回值写入ret中

从上面可知,不管 shell脚本返回什么值,只要调用了/bin/sh,并且执行过程没有被信号中断,都算正常结束。因为脚本是在子进程中执行的,所以要想获取脚本是否执行成功的方法只能用系统提供的两个宏。

由于我们一般在 shell中会通过返回值判断脚本是否执行成功,成功返回0,成功返回整数。所以判断一个脚本是否执行成功,应该满足三个条件:

注意:当 shell脚本不存在时、没有执行条件等,前两个条件也会成立,此时WEXITSTATUS(ret)为127,所以shell脚本中不能将127作为返回值,shell脚本中的异常返回值最好从1开始递增,成功返回0。

system用起来,看则简单,实则不那么简单,有很多隐藏的坑,需要自己深入理解原理,才能更好地使用,也可以用其他实现方式完成相同的功能。

最后对自己说,多写,多思,多总结

阅读剩余
THE END