tôi đang làm việc trên một chức năng nhỏ tiện lợi:Mở một quá trình với Popen và nhận được PID
def startProcess(name, path):
"""
Starts a process in the background and writes a PID file
returns integer: pid
"""
# Check if the process is already running
status, pid = processStatus(name)
if status == RUNNING:
raise AlreadyStartedError(pid)
# Start process
process = subprocess.Popen(path + ' > /dev/null 2> /dev/null &', shell=True)
# Write PID file
pidfilename = os.path.join(PIDPATH, name + '.pid')
pidfile = open(pidfilename, 'w')
pidfile.write(str(process.pid))
pidfile.close()
return process.pid
Vấn đề là process.pid
không phải là PID chính xác. Có vẻ như nó luôn thấp hơn 1 lần so với PID chính xác. Ví dụ, nó nói quá trình bắt đầu tại 31729, nhưng ps
nói rằng nó đang chạy ở 31730. Mỗi khi tôi đã cố gắng nó đi bằng 1. Tôi đoán PID nó trả về là PID của hiện tại quá trình, không phải là bắt đầu một, và quá trình mới nhận được pid 'tiếp theo' là 1 cao hơn. Nếu đúng như vậy, tôi không thể chỉ dựa vào việc trả lại process.pid + 1
vì tôi không đảm bảo rằng nó sẽ luôn chính xác.
Tại sao không process.pid
trả về PID của quy trình mới và làm cách nào để tôi có thể đạt được hành vi sau?
Thử xóa 'shell = True' và công cụ'> 'của bạn. – Blender
tôi có cùng một vấn đề và tôi phát hiện ra một cách khó khăn, nó không phải lúc nào cũng PID + 1, lúc đầu, nhưng bây giờ nó cho tôi +2 – andrei