在使用 python 解释器中的 OS 模块(在 Linux 系统的 shell 中运行)时,我注意到可以执行以下操作:
>>> os.system("python") #execute run python command in enclosing shell
产生以下输出,指示一个新的 python REPL 会话:
Python 2.7.9 (default, Apr 2 2015, 15:34:55)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> #*blinking cursor*
从这里,可以再次进行系统调用以启动新的 Python 会话,我可以从中再次进行系统调用等。这些 Python 环境似乎彼此独立,因为变量不会在会话之间共享,并且系统调用被同等对待。
这些会话似乎在彼此内部运行,至少在某种程度上,而不是并行运行,如 quit() 函数的结果所示:
>>> os.system("python")
Python 2.7.9 (default, Apr 2 2015, 15:34:55)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> quit()
0
>>> quit()
0
>>> quit()
0
>>> quit()
shaked@shaked-ThinkPad-X220:~/Desktop$ python
然而,从 shell 中快速检查 (>>> os.system("ps -e")) 会发现每个运行的 python 解释器都有一个新的 sh:
11802 ? 00:00:00 kworker/u16:0
11803 pts/3 00:00:00 sh
11804 pts/3 00:00:00 python
11806 pts/3 00:00:00 sh
11807 pts/3 00:00:00 python
11810 pts/3 00:00:00 sh
11811 pts/3 00:00:00 python
11813 pts/3 00:00:00 sh
11814 pts/3 00:00:00 ps
任何人都可以根据底层系统进程来解释这个(看似)奇怪的行为吗?也就是说,这些会话是并行运行还是在彼此内部运行?
抱歉,如果这个问题以前出现过,但我不确定其他人可能会如何提出它。