单个PID运行两个命令

时间:2018-09-21 07:52:18

标签: python-3.x

当我从bash检查进程时,它会显示:

In [42]: !ps
  PID TTY           TIME CMD
  417 ttys000    0:00.49 -bash
 7783 ttys000    0:06.50 /Users/me/anaconda3/bin/python /Users/me/anaconda3/bin/ipython

pid 7783似乎同时运行两个命令,

请提供任何有助于理解的提示吗?

1 个答案:

答案 0 :(得分:1)

它仅运行一个命令,但带有一个参数:

/Users/me/anaconda3/bin/python /Users/me/anaconda3/bin/ipython
^ command                      ^ argument

Python脚本不能直接执行。需要一个解释器才能实际运行它们。同样,在您的情况下,命令是python 解释器,参数是ipython 脚本

直接执行脚本时,操作系统会在内部窥视一下它是否具有shebang。该行以#!(实际上是字节序列0x2321)开头,后跟用于运行文件的程序的路径。例如,在我的系统上,ipython脚本指向python3.7解释器:

$ head -1 $(which ipython3)
#!/usr/local/opt/python/bin/python3.7

调用脚本会自动扩展为使用脚本调用shebang程序。因此,您永远不会看到实际的脚本本身在运行,只有运行脚本的解释器。

$ ipython3 -c '!ps' | grep ipython3
5764 ttys004    0:00.37 /usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python /Users/miyagi/Library/Python/3.7/bin/ipython3 -c !ps