为什么/etc/rc.local两次启动相同的Python脚本?

时间:2019-03-04 09:31:29

标签: python-3.x raspberry-pi3 raspbian

我用rc.local这样启动脚本:

sudo python3 /home/pi/myscript.py &   # &-mark because of while loop

我在终端写

ps aux | grep "/home/pi"

它告诉我:

python3 /home/pi/myscript.py         # <-- What is this?
sudo python3 /home/pi/myscript.py    # <-- rc.local 

如果我从rc.local文件中删除该开始行,则没有脚本在运行。用户也是这两个用户的根。 它真的可以同时运行两次脚本吗?

2 个答案:

答案 0 :(得分:1)

在这种情况下;该行:

python3 /home/pi/myscript.py         # <-- What is this?

python命令,由sudo命令和以下行运行:

sudo python3 /home/pi/myscript.py    # <-- rc.local

是sudo命令,由rc.local调用。

使用ps -fe还会显示进程的父pid,由此很容易看出python命令是sudo命令的子项(使用sudo bash示例):

$ ps -fe | grep bash
  UID   PID  PPID   C STIME   TTY           TIME CMD
    0 15095   481   0 10:18am ttys000    0:00.06 sudo bash
    0 15096 15095   0 10:18am ttys000    0:00.01 bash

所以bash的父对象是pid 15095,它是调用bash的sudo命令的pid。

由于rc.local脚本已经作为root用户运行,因此不需要sudo,因此为了避免出现看似多个副本的情况,可以在脚本中省略sudo

答案 1 :(得分:0)

好,发现rc.local不需要sudo,因为它已经以root身份运行。所以sudo导致了这种情况。

sudo python3 /home/pi/myscript.py &   # &-mark because of while loop 

必须更改为:

python3 /home/pi/myscript.py &   # &-mark because of while loop