执行脚本或命令时,常用到的三种方式:sh、source、exec。
区别:
sh:会启动一个子进程,执行完退出子进程,回到父进程,不影响父进程上下文。
source:(就是点命令". sh")在进程中分配出一部分资源执行,使用进程的上下文中,执行完回到原来进程中,会影响进程上下文。
exec:执行进程会替换原来的进程(代码、上下文、堆栈信息等),只是pid不变,执行完结束进程。
示例:
testsh.sh
#!/bin/bash
while [ true ]
do
echo $$
sleep 5
done
sh testsh.sh 查看的pid为25014是执行sh testsh.sh的,ps -f 25014可以查看父进程pid为25909。
![]()
ps -axjf可以树状查看进程。退出脚本后,子进程pid消失,父进程还在。


source test.sh 查看的进程pid为25909就是bash的,运行时没有其他进程,退出后仍然存在。
![]()
运行时:

退出后:

exec 查看一个命令后,显示了当前pid后,直接退出了当前shell,回到了pid 33468。

![]()

本文详细介绍了在Shell中执行脚本或命令的三种常见方式:sh、source和exec的区别及应用场景。通过具体的示例展示了每种方式如何影响进程的上下文环境。
1718

被折叠的 条评论
为什么被折叠?



