相关疑难解决方法(0)

有没有办法在Unix中更改另一个进程的环境变量?

在Unix上,有没有办法让一个进程可以改变另一个进程的环境变量(假设它们都是由同一个用户运行)?一般的解决方案是最好的,但如果没有,那么一个人是另一个人的孩子的具体情况怎么样?

编辑:通过gdb怎么样?

unix linux shell gdb environment-variables

93
推荐指数
6
解决办法
3万
查看次数

是否可以在python中更改父进程的环境?

在Linux中当我从shell调用python时,它复制了它的环境,并启动了python进程.因此,如果我执行以下操作:

import os
os.environ["FOO"] = "A_Value"
Run Code Online (Sandbox Code Playgroud)

当python进程返回时,FOO(假设它原来是未定义的)仍将是未定义的.有没有办法让python进程(或任何子进程)修改其父进程的环境?

我知道你通常用类似的东西来解决这个问题

source script_name.sh
Run Code Online (Sandbox Code Playgroud)

但这与我的其他要求相冲突.

python linux environment

19
推荐指数
3
解决办法
1万
查看次数

如何在Perl脚本中导出shell变量?

我有一个shell脚本,带有一个shell变量列表,在进入编程环境之前执行.

我想使用Perl脚本进入编程环境:

system("environment_defaults.sh");
system("obe");
Run Code Online (Sandbox Code Playgroud)

但是当我进入环境时,变量没有设置.

unix shell perl environment-variables

5
推荐指数
2
解决办法
1万
查看次数

更改调用进程的环境变量

这个似乎微不足道,但现在几天我的答案已经躲过了.

我有一个Windows批处理文件,它调用C#程序进行额外的验证,这是在批处理文件中无法完成的.验证完成后,我需要将状态和字符串返回给调用shell.

现在返回值很简单,我的C#控制台应用程序只是设置一个返回值(如果你愿意,退出代码).我认为这根绳子也是小菜一碟.我尝试使用以下命令定义一个新的shell变量:

Environment.SetEnvironmentVariable("ERR", "Some text");
Run Code Online (Sandbox Code Playgroud)

这个调用应该(并且确实)在当前进程中定义一个shell变量- 这是创建变量的C#进程.一旦C#应用程序终止并且创建C#应用程序的shell对变量一无所知,该值就会丢失.所以...一个没有特别用途的电话......完全......除非我从C3应用程序创建了一个子进程,否则它可能会继承我的变量.

SetEnvironmentVariable调用的EnvironmentVariableTarget.Machine和EnvironmentVariableTarget.User目标也不能解决问题,因为只有新创建的进程才能从注册表中获取这些新值.

所以我能想到的唯一可行解决方案是:

  • 写信给stdout
  • 写入文件
  • 将额外含义编码到返回值中

前两个有点难看,最后一个有其局限性和问题.

任何其他想法(如何在父进程中设置shell变量)?也许这样的shell变量修改是一个安全问题(想想PATH)......

感谢您的时间.

c# windows-shell

5
推荐指数
1
解决办法
2724
查看次数

子进程会影响父进程的环境吗?

孩子继承父母的环境”是什么意思?通过复制整个环境来继承,还是通过接收指向同一环境的指针来继承(以某种方式)?


这是我的场景:

  1. 我有一个正在运行的进程P,有自己的环境(变量)
  2. 在某个时刻,P执行fork
  3. 在(也称为子进程中)0的克隆中,执行if-statementCexecv
  4. 两个进程继续独立运行。

因此,在某个时刻,应用程序会停止正常工作。原因就是——“破碎”的环境。

有趣的是,两个环境都改变了。当我启动父进程并执行时

$ cat /proc/PID/environ
Run Code Online (Sandbox Code Playgroud)

对于父母和进程来说,一切都很好。几个小时后,应用程序停止工作,当我再次执行上面的行(以检查环境)时,两者都发生了更改,并且丢失了很多环境变量 - 只有标准变量存在(如 、PWDHOMEUSER)。

这怎么可能?问题出在哪里——孩子还是父母?


编辑:感谢大家的回答,我+1,因为它们都是正确的(@caf、@Saphrosit 和@R..)。这个问题的原因实在是太蠢了。。

所有环境变量都放置在/etc/profile登录后执行的位置(那..我不知道)。

嗯,看来问题是在重新启动机器时发生的。因此,在启动时,应用程序会再次启动,但/etc/profile/不会执行/读取。这会导致不良行为。这就是为什么手动重新启动时问题消失的原因 - 一旦 aroot登录(通过ssh),环境变量就会/etc/profiles被读取,并且当父进程重新启动(通过root)时,一切都很好 - 环境变量被继承。

愚蠢的错误。

c c++ unix process environment-variables

2
推荐指数
1
解决办法
3326
查看次数

标签 统计

environment-variables ×3

unix ×3

linux ×2

shell ×2

c ×1

c# ×1

c++ ×1

environment ×1

gdb ×1

perl ×1

process ×1

python ×1

windows-shell ×1