Bash在变量和kill过程中存储命令PID

时间:2015-03-30 06:57:27

标签: bash variables process kill

我想使用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.

1 个答案:

答案 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)