杀死在linux上运行的python脚本中的进程

时间:2016-07-23 08:07:02

标签: python linux bash shell awk

我有Raspbian作为在我的RPI上运行的Linux发行版。我使用twisted设置了一个小型套接字服务器,它从iOS应用程序接收某些命令。这些命令是字符串。当我收到“st”时,我开始了一个过程,现在我想在获得“sp”时杀死它。这是我尝试的方式:

  1. 导入的操作系统
  2. 使用os.system(“...”)//启动进程
  3. os.system(“...”)//杀死进程
  4. 假设该服务名为xyz。 这是我试图杀死它的确切方式:

    os.system('ps axf | grep xyz | grep -v grep | awk'{print“kill”$ 1}'| sh')

    但是我遇到了语法错误。当我在终端单独尝试时,该线路运行完美。这是在python脚本中执行此操作的错误方法吗?我该如何解决?

2 个答案:

答案 0 :(得分:0)

您需要转义字符串中的引号:

os.system('ps axf | grep xyz | grep -v grep | awk \'{print "kill " $1 }\' | sh')

或使用三重报价:

os.system('''ps axf | grep xyz | grep -v grep | awk '{print "kill " $1 }' | sh''')

答案 1 :(得分:0)

或者,使用Popen(...).pid打开该流程,然后使用os.kill()

my_pid = Popen('/home/rolf/test1.sh',).pid
os.kill(int(my_pid), signal.SIGKILL)

请记住在脚本中添加一个shebang(#!/ bin / sh)

编辑: 第二个想法,也许

os.kill(int(my_pid), signal.SIGTERM)

可能是结束这个过程的更好方法,它至少让这个过程有机会优雅地关闭。