0

我需要跟踪并启动一些 BASH 脚本作为进程(如果它们由于某种原因崩溃等)。所以我尝试如下:但不工作

  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")

没有工作。

4

2 回答 2

1

如何通过带有 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")

请注意,有时您必须使用空输入和输出来在终端关闭时保持进程处于活动状态:

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")

或者也许定义另一个函数:

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")
于 2013-09-18T02:12:07.587 回答
0

这很有效,作为我电影的独立过程。

p.py:

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

运行me.sh:

#!/bin/bash
export DISPLAY=:0.0 
vlc /var/tmp/Terminator3.Movie.mp4
于 2013-09-18T02:17:53.327 回答