LoginSignup
4
6

More than 5 years have passed since last update.

Python+subprocessで子プロセスを一定時間で終了する方法

Posted at

親プロセスからsubprocessで子プロセスを起動して、一定時間経過後親プロセスからkillする方法。

環境:CentOS7、Python3.6

コード

import subprocess
import time

cmd = """
while true
do
  date
  sleep 1s
done"""
p = subprocess.Popen(cmd, shell=True)
time.sleep(5)
p.kill()

実行結果

Sat Mar 24 17:01:26 JST 2018
Sat Mar 24 17:01:27 JST 2018
Sat Mar 24 17:01:28 JST 2018
Sat Mar 24 17:01:29 JST 2018
Sat Mar 24 17:01:30 JST 2018

subprocess.runや.callだと子プロセスの終了を待つため延々と実行されます。subprocess.Popenだと投げっぱなしのfire and forgetとなるらしい。

注意:shell=Trueはシェルインジェクションに悪用されるため、コマンドを入力を受け付けるような処理では使わないようにしてください。

Pythonを使わずにtimeoutコマンドで終了させる方法もあります。以下、参考資料。

参考:
一定時間でシェルコマンドを終了させるたった1つの方法
https://qiita.com/ma2saka/items/741b614418bf8fce04de
“Fire and forget” a process from a Python script
https://stackoverflow.com/questions/17937249/fire-and-forget-a-process-from-a-python-script

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6