我用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文件中删除该开始行,则没有脚本在运行。用户也是这两个用户的根。 它真的可以同时运行两次脚本吗?
答案 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