毎日5分間勉強する

8092 ワード

説明:systemd logを見ていると面白い印刷が見つかりましたが、なぜかよくわかりませんが、貼って友達と共有して、知っている友達の説明を歓迎します.ありがとうございます.
 
問題の説明:サービスが開始されると、コンパイルされたC++実行可能ファイルを呼び出すpythonスクリプトが実行されます.その間にlog出力があり、時間的にはC++のlogが先に印刷され、pythonのlogが印刷されます.なぜこのようなロゴ印刷方式が現れるのですか?
 
デモの例
pythonスクリプト:
import sys
import subprocess
import re
 
print("I am python, the first command")
cmd = "hello"
subprocess.call(cmd.split())
print("I am python, the second command")
subprocess.call(cmd.split())
subprocess.call(cmd.split())
print("OK, you win CPlusCPlus, I reminber you")

 
C++実行可能ファイルhello:
[root@lianhua lianhua_debug.log]# cat hello.cpp
#include 
 
int main(void)
{
    printf("Hello, I am CPlusPlus, who are you?
"); return 0; } [root@lianhua lianhua_debug.log]# gcc -c hello.cpp [root@lianhua lianhua_debug.log]# gcc -o hello hello.cpp [root@lianhua lianhua_debug.log]# env | grep usr PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin/ [root@lianhua lianhua_debug.log]# mv hello /usr/bin/ [root@lianhua lianhua_debug.log]# hello Hello, I am CPlusPlus, who are you?

 
systemd service lianhua_debug:
[root@lianhua lianhua_debug.log]# systemctl cat lianhua_debug_log
# /usr/lib/systemd/system/lianhua_debug_log.service
[Unit]
Description=lianhua_debug_log.service
 
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/python /home/lianhuasheng/lianhua_debug.log/lianhua_debug_log.py

 
サービスの開始:
[root@lianhua lianhua_debug.log]# systemctl status lianhua_debug_log
● lianhua_debug_log.service
   Loaded: loaded (/usr/lib/systemd/system/lianhua_debug_log.service; static; vendor preset: disabled)
   Active: active (exited) since Sat 2020-05-30 12:57:10 CST; 26min ago
  Process: 28671 ExecStart=/bin/python /home/lianhuasheng/lianhua_debug.log/lianhua_debug_log.py (code=exited, status=0/SUCCESS)
Main PID: 28671 (code=exited, status=0/SUCCESS)
 
May 30 12:57:10 lianhua.localdomain systemd[1]: Starting lianhua_debug_log.service...
May 30 12:57:10 lianhua.localdomain python[28671]: Hello, I am CPlusPlus, who are you?
May 30 12:57:10 lianhua.localdomain python[28671]: Hello, I am CPlusPlus, who are you?
May 30 12:57:10 lianhua.localdomain python[28671]: Hello, I am CPlusPlus, who are you?
May 30 12:57:10 lianhua.localdomain python[28671]: I am python, the first command
May 30 12:57:10 lianhua.localdomain python[28671]: I am python, the second command
May 30 12:57:10 lianhua.localdomain python[28671]: OK, you win CPlusCPlus, I remember you
May 30 12:57:10 lianhua.localdomain systemd[1]: Started lianhua_debug_log.service.

サービスを起動した後、出力されたlogはhelloを実行するlogであり、pythonスクリプトの出力logであることがわかります.
 
 
コマンド/bin/python/home/lianhuasheng/lianhua_debug.log/lianhua_debug_log.py実行時に異なるlog印刷が表示されます.
[root@lianhua lianhua_debug.log]# /bin/python /home/lianhuasheng/lianhua_debug.log/lianhua_debug_log.py
I am python, the first command
Hello, I am CPlusPlus, who are you?
I am python, the second command
Hello, I am CPlusPlus, who are you?
Hello, I am CPlusPlus, who are you?
OK, you win CPlusCPlus, I remember you

 
おかしいのではないでしょうか.なぜ違うロゴ印刷方式が現れたのでしょうか.
個人的には、pythonスクリプトを先に実行し、python logを印刷し、サブプロセスがhelloを実行してhelloのlogを印刷し、サブプロセスが終了してpythonスクリプトを実行し、pythonのlogを印刷する(第2のpythonスクリプトを直接実行する方法)ということではないでしょうか.なぜシステムdに全く異なるロゴ印刷が現れるのでしょうか?
 
 
(未完、続き...)