我有Raspbian作为在我的RPI上运行的Linux发行版。我使用twisted设置了一个小型套接字服务器,它从iOS应用程序接收某些命令。这些命令是字符串。当我收到“st”时,我开始了一个过程,现在我想在获得“sp”时杀死它。这是我尝试的方式:
假设该服务名为xyz。 这是我试图杀死它的确切方式:
os.system('ps axf | grep xyz | grep -v grep | awk'{print“kill”$ 1}'| sh')
但是我遇到了语法错误。当我在终端单独尝试时,该线路运行完美。这是在python脚本中执行此操作的错误方法吗?我该如何解决?
答案 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)
可能是结束这个过程的更好方法,它至少让这个过程有机会优雅地关闭。