命令行输入的命令,和命令运行时的PID并不是同一个。
例如有如下一段代码perf_test.py:
1 importsubprocess2 importtime3 importos4 importsignal5
6 cmd = "sudo perf record -e cpu-clock -g -p {} -o perf_{}.data".format(os.getpid(), os.getpid())7 print(cmd)8 p = subprocess.Popen(cmd, shell=True)9 print("cur process pid: {}".format(os.getpid()))10 print("cur process's parent process pid: {}".format(os.getppid()))11
12 print("subprocess pid: {}".format(p.pid))13 print("session pid which subprocess exist in: {}".format(os.getsid(p.pid)))14 print("subprocess's group pid: {}".format(os.getpgid(p.pid)))15
16 time.sleep(10)17 get_cmd_pid = "pgrep '{}'".format('perf')18 cmd_pid =os.popen(get_cmd_pid).read()19 print("{} : {}".format(get_cmd_pid, cmd_pid))20
21 os.kill(p.pid, signal.SIGINT)
(1)在命令行输入:$ sudo python