Bash 在变量中存储命令 PID 并终止进程

标签 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。

最佳答案

$$ 是当前进程,这意味着脚本正在杀死自己。您可以使用 $! 获取在后台启动的最后一个进程的进程 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)

关于Bash 在变量中存储命令 PID 并终止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29340087/

相关文章:

javascript - 如何在nodejs中使用SHA1进行加密?

variables - 定义一个变量并在定义过程中出现问题时将其设置为默认值

javascript - 如何将 Ghostcript 生成到 Node.js 环境中

linux - wait() 在 Linux 中如何工作?

linux - 如果 grep 找到匹配项,则打印 grep 关键字

bash - 这些 bash 语句都是等价的吗?

使用 --init-file 的 bash 技巧

javascript - iOS 从 UIWebView 检索 javascript 变量

c - arduino上的循环变量

c# - 以下过程有什么区别?