简体   繁体   English

我如何让BASH脚本作为进程运行? 那么即使Python脚本被杀死,BASH脚本也会永远运行?

[英]How can i let the BASH script run as process? So that even the Python script is killed the BASH script runs forever?

I need to track and launch few BASH scripts as process (if they for some reason crashed or etc). 我需要跟踪并启动一些BASH脚本作为进程(如果由于某种原因崩溃等)。 So i was trying as below: but not working 所以我尝试如下:但没有工作

  def ps(self, command):
    process = subprocess.Popen(['/bin/bash'], shell=False, stdin=subprocess.PIPE,  stdout=subprocess.PIPE)
    process.stdin.write(command + '\n')
    process.stdout.readline()

  ps("/var/tmp/KernelbootRun.sh")
  ps("ps aux | grep processCreator.py | awk '{print $2}' | xargs kill -9")

None is working. 没有工作。

How about running it through a subshell with disown: 如何使用disown通过子shell运行它:

import os
def ps(self, command):
  os.system(command + " & disown")

ps("/var/tmp/KernelbootRun.sh")
ps("ps aux | grep processCreator.py | awk '{print $2}' | xargs kill -9")

Note that sometimes you have to use a null input and output to keep your process active when the terminal is closed: 请注意,有时您必须使用空输入和输出来在终端关闭时保持您的进程处于活动状态:

ps("</dev/null /var/tmp/KernelbootRun.sh >/dev/null 2>&1")
ps("</dev/null ps aux | grep processCreator.py | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1")

Or perhaps define another function: 或者也许定义另一个功能:

def psn(self, command):
  os.system("</dev/null " + command + " >/dev/null 2>&1 & disown")

psn("/var/tmp/KernelbootRun.sh")
psn("ps aux | grep processCreator.py | awk '{print $2}' | xargs kill -9")

This works great, as stand-alone process for my movie. 这很好,作为我的电影的独立过程。

p.py: p.py:

import subprocess
subprocess.Popen("/var/tmp/runme.sh", shell=False, stdin=subprocess.PIPE,  stdout=subprocess.PIPE)

runme.sh: runme.sh:

#!/bin/bash
export DISPLAY=:0.0 
vlc /var/tmp/Terminator3.Movie.mp4

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM