我想使用shell脚本来建立以太网连接。
我使用的函数实现为:
function connec()
{
ip link set eth0 up
sleep 5
udhcpc -i eth0
pid=$$
echo $pid
ps
kill -9 $pid
}
然而,脚本返回:
743
743 root 2704 S {script.sh} /bin/bash ./script.sh connect
767 root 2200 S udhcpc -i eth0
Killed
我在商店767而不是743成功。我也试过使用$!但在那个特定情况下" echo $ pid"返回0.
答案 0 :(得分:4)
$$
是当前的进程,这意味着该脚本正在自行查杀。您可以使用$!
获取在后台启动的上一个流程的流程ID,但看起来您实际上并未启动其中一个。
使用您的代码段:
udhcpc -i eth0
pid=$$
pid=
行只会在udhcpc
退出时执行(或守护自身,在这种情况下$$
和$!
都无法正常工作),所以没有任何意义试图杀死这个过程。
要在后台运行并存储其进程ID,以便继续在父级中运行,您可以使用以下内容:
udhcpc -f -i eth0 &
pid=$!
并且在这种情况下你使用-f
在前台运行,因为你正在接管正常的作业控制。
或者,由于udhcpc
可以创建自己的 PID文件,因此您可以使用以下内容:
udhcpc -i eth0 -p /tmp/udhcpc.eth0.pid
pid=$(cat /tmp/udhcpc.eth0.pid)