shell命令-source与exec

  source命令与exec命令都可以用于执行新的shell脚本,那他们有什么区别和注意的地方呢?我们下面通过一个小实验查看两者的区别。

source命令

  首先编写子进程shell代码如下:

#!/bin/bash

while :
do
	echo "in child proc: $$"
	sleep 0.5				#单位:s
done

该shell脚本每0.5秒进行一次打印输出。

  下面我们编写父进程脚本如下,使用source命令启动子进程:

#!/bin/bash

source ./child_proc.sh &		# &表示后台运行,否则父进程将停止执行
clipid=$!						# 获取子进程PID

echo "in father proc: $$"

sleep 3							# 单位:s

kill $clipid					# 结束子进程
echo "proc $$: end..."

执行结果如下:

在这里插入图片描述

  可以看到,父进程与“子进程”的进程ID一样!所以说,source命令实际上并没有开辟新的进程,而是创建了一个线程

exec命令

  将父进程代码中的source命令修改为exec命令,如下

#!/bin/bash

exec ./child_proc.sh &			# &表示后台运行,否则父进程将停止执行
clipid=$!						# 获取子进程PID

echo "in father proc: $$"

sleep 3							# 单位:s

kill $clipid					# 结束子进程
echo "proc $$: end..."

执行结果如下:

在这里插入图片描述

  可以看到此时子进程与父进程的进程ID不再相同,因此exec命令是开辟了新的进程

总结

  source命令(即 . 命令)是新建线程,而exec命令是创建进程

猜你喜欢

转载自blog.csdn.net/qq_43557686/article/details/126351783