执行脚本或命令时,常用到的三种方式: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。