Shell中的exec和source解析
exec和source都属于bash内部命令,在讲这两个命令之前,前谈一下fork的概念:
fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。环境变量只能单向从父进程传给子进程,不管子进程的环境变量如何变化,都不会影响父进程的环境变量。
脚本的执行:
1. 新产生一个shell然后再执行scripts,也就是通常的sh命令。
一般在scripts文件的开头有如下一行:
#!/bin/sh
2. 在当前shell下执行,不再启用其他shell。
source命令:不再产生新的shell(进程),而在当前shell下执行一切命令。
exec命令:不再产生新的shell(进程),但执行时会把当前的shell process关闭,然后换到后面的命令继续执行。
exec:
1. 系统调用exec是以新的进程去代替原来的进程,但进程的PID保持不变。因此,可以这样认为,exec系统调用并没有创建新的进程,只是替换了原来进程上下文的内容。原进程的代码段,数据段,堆栈段被新的进程所代替
2. exec是一个函数簇,由6个函数组成,分别是以excl和execv打头的。
3. exec与system的区别
1) exec是直接用新的进程去代替原来的程序运行,运行完毕之后不回到原先的程序中去。
2) system是调用shell执行你的命令,system=fork+exec+waitpid,执行完毕之后,回到原先的程序中去。继续执行下面的部分。
也就是说,如果你用exec调用,首先应该fork一个新的进程,然后exec. 而system不需要fork新进程,已经封装好了。
相关推荐
在Windows平台下安装PHP后,在使用PHP的exec、shell_exec等函数时,经常会遇到报错:unable to fork...,这实际上是因为PHP对cmd.exe没有足够的权限引起的。
主要介绍了PHP中exec函数和shell_exec函数的区别,这两个函数是非常危险的函数,一般情况都是被禁用的,当然特殊情况下也会使用,需要的朋友可以参考下
source insight的shell语言支持包,导入后在source insight中可以实现shell的高亮、跳转语义分析等。方便好用,亲测有效。
shellexec 这个Go提供了跨平台类似shell的命令行执行
主要介绍了shell中source、sh、bash、./执行脚本的区别,需要的朋友可以参考下
source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是个点符号,(从Bourne Shell而来)是source的另一名称。 source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。...
shell-exec-java-server描述使用这个服务器,你可以访问远程服务器并执行shell命令例如)你会丢失ssh密钥,但不要担心。 保持此服务器正常工作意味着您有后门。用法第一步更改运行此程序的端口。 public static ...
原文:https://editor.csdn.net/md/?articleId=120167145
shell_exec() shell_exec() 命令行实际上仅是反撇号 (`) 操作符的变体。如果您编写过 shell 或 Perl 脚本,您就知道可以在反撇号操作符内部捕捉其他命令的输出。例如,清单 1 显示了如何使用反撇号...
Shell Sample 博文链接:https://flyfoxs.iteye.com/blog/1563992
c语言实现shell命令解析。功能强大,可直接在linux下编译运行。
sh - 一个shell解析器和格式化程序
use Technodelight \ ShellExec \ Command ; use Technodelight \ ShellExec \ Exec ; $ shell = new Exec ( 'which' ); $ output = $ shell -> exec ( Command :: create () -> withArgument ( '...
这是一个在linux下的shell解析程序的源代码,不仅支持ls,cd等简单命令的shell解析,还支持管道文件操作。用gcc编译器即可。
shell 通过正则、换行、替换等原生态命令 实现 万能解析 json xml sql语句和一切有规则的文本。 在shll里面设置数组来实现自定义提取所需字段 主要是正则的运用,比如:arr[$ar]=$(echo $L | sed 's/\(.*\)"'"$ar"'...
WScript.Shell对象提供了run和exec两个方法,最近项目中需要在vbscript脚本中用pscp从linux服务器上copy文件。本来使用了exec方法,以下代码
模拟Linux中的shell 命令解析器 实现读入解释和运行用户输入的命令等
Visual basic Shell Programming source code vb shell编程的源代码
Windows命令行Shell命令详细解析和语法