gpt4 book ai didi

linux - 当从同一个 shell 调用时,跨应用程序的多个实例维护一个 session

转载 作者:太空宇宙 更新时间:2023-11-04 10:02:54 25 4
gpt4 key购买 nike

我试图让数据(仅在应用程序启动后由应用程序生成)在应用程序的多次调用中保持不变,但仅当它们从同一个 shell session 启动时。

一种可能的方法是将数据从应用程序传回调用 shell,但由于环境变量更改仅从父级传递给子级,我不知道如何实现它。

实际例子:有 job 命令可以创建包含当前日期时间的子目录并在其中工作。有时作业需要被终止并重新启动,所以它需要完成后的目录,如 job --resume 21Fri_1849/data。我想保存 21Jan_1849/data,这样我就不必在每次需要恢复工作时都检查和输入它。如果我创建了类似 .last_job 的东西,并想在另一个 session 中重新启 Action 业,它可能会恢复错误的(最后的)作业,因此文件不是解决方案(AFAIK)。

如何做到这一点?

最佳答案

由于您只是尝试以 Linux 为目标,因此这里有很多可用的技巧。考虑一下这个:

#!/usr/bin/env bash
current_boot_id=$(</proc/sys/kernel/random/boot_id)

# honor myprog_shell_pid if set and valid, fall back to PPID otherwise
if [[ $myprog_shell_pid ]] && [[ -e /proc/$myprog_shell_pid/stat ]]; then
parent_pid=$myprog_shell_pid
else
parent_pid=$PPID
fi

parent_start_time=$(awk '{print $22}' "/proc/$parent_pid/stat")
mkdir -p "$HOME/.cache/myscript-sessions"
data=$HOME/.cache/myscript-sessions/${current_boot_id}:${parent_pid}:${parent_start_time}

现在,我们有一个更改的数据文件名:

  • 当我们重新启动时(因为 current_boot_id 已更新)
  • 如果我们从不同的 shell 运行(因为我们的 PPID 发生了变化)。
  • 如果我们从具有相同 PID 的不同 shell 运行(因为父 PID 的启动时间将不同)。

...并且您可以轻松删除引导 ID 错误(因为系统重新启动)或名称引用不存在的 PID/启动时间组合的文件。

需要注意的是,默认情况下,这对子 shell 的调用很敏感(output=$(./yourprog) 的 PPID 与 ./yourprog 不同)会),但如果父 shell 运行 export myprog_shell_pid=$$,该问题就会消失。

关于linux - 当从同一个 shell 调用时,跨应用程序的多个实例维护一个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54676070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com