sh脚本中的系统环境变量如何更新?

Unee_Yu 2012-10-18 12:15:54
例如
首先设置一个系统变量:export STOP_FLAG="T"

然后编写一个脚本var.sh:

#!/bin/sh
while [ $STOP_FLAG = "T" ]
do
sleep 5
echo $STOP_FLAG>>test.log
done


运行脚本,后台进程:./var.sh &

这时test.log里的STOP_FLAG的值是T

然后我想在当前Shell下重新修改STOP_FLAG的值 使var.sh停止运行
export STOP_FLAG="F"

但实际上停不了var.sh进程,虽然从命令行查看STOP_FLAG的值已经改变,进程var.sh读到的STOP_FLAG仍然是“T”。

是不是启动var.sh时, var.sh只能读取当时的环境变量设置?
除了kill外,如何才能让var.sh停下来?
...全文
319 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Unee_Yu 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
进程被创建会继承父进程的环境变量, 之后父进程就没法更改已经在运行的子进程的环境变量了,只能通知子进程让它自己修改, 比如子进程监听一个信号,并且父进程将希望更改的变量写到FIFO里,子进程监听到信号后从FIFO里获得新的数据.
[/Quote]

这涉及到进程间通讯了 刚开始弄Linux 这些还不太会弄呢
Unee_Yu 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
脚本的环境变量是运行脚本的时候就初始化好了的,运行过程中不受外面的影响了。
除了用 kill,你可以使用管道(有名管道)、文件。但是用 kill 是很正常的一个方法呀,另外 kill 不一定是杀进程,也可以是发送信息,你可以用 kill -s 指定其它的信号。
[/Quote]

嗯 运行后修改环境变量就没用了。
qq120848369 2012-10-18
  • 打赏
  • 举报
回复
进程被创建会继承父进程的环境变量, 之后父进程就没法更改已经在运行的子进程的环境变量了,只能通知子进程让它自己修改, 比如子进程监听一个信号,并且父进程将希望更改的变量写到FIFO里,子进程监听到信号后从FIFO里获得新的数据.
nicenight 2012-10-18
  • 打赏
  • 举报
回复
脚本的环境变量是运行脚本的时候就初始化好了的,运行过程中不受外面的影响了。
除了用 kill,你可以使用管道(有名管道)、文件。但是用 kill 是很正常的一个方法呀,另外 kill 不一定是杀进程,也可以是发送信息,你可以用 kill -s 指定其它的信号。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧