phi*_*raj 8 bash shell-script parallelism
假设我有多个并行运行的 bash 脚本,代码如下:
#!/bin/bash
tail -f /dev/null &
echo "pid is "$!
Run Code Online (Sandbox Code Playgroud)
为$!保证给我最近的后台任务的PID该脚本,或者是最近的后台任务在全球范围?我只是好奇,当它返回的 PID 来自另一个脚本中启动的进程时,依赖此功能是否会导致竞争条件。
Sté*_*las 16
$!保证为您提供 shell 执行该tail命令的进程的 pid 。Shell 是单线程的,每个 Shell 都生活在自己的进程中,并拥有自己的一组变量。有没有办法让$!一个壳的打算泄漏到另一个shell,就像在一个外壳赋予一个shell变量不会影响同名的变量在另一个shell(如果我们抛开通用变量中的fish壳) .
现在,tail -f /dev/null是一个无限期运行的命令,但对于短期命令,请注意,由于可能的进程 ID 数量有限,因此进程 ID 不可避免地最终会被重用。
在:
true &
pid=$!
Run Code Online (Sandbox Code Playgroud)
这$pid将包含 shell 运行的进程的 id true,但是当您使用它时$pid,该 pid 很可能已经死了,并且可能指的是不同的进程。