मैं एक गंधा छोटे से समारोह पर काम कर रहा हूँ हो रही:popen के साथ एक प्रक्रिया खुलने और पीआईडी
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
समस्या यह है कि process.pid
सही पीआईडी नहीं है। ऐसा लगता है कि यह सही पीआईडी से हमेशा 1 कम है। उदाहरण के लिए, यह कहता है कि प्रक्रिया 3172 9 पर शुरू हुई, लेकिन ps
का कहना है कि यह 31730 पर चल रहा है। हर बार मैंने कोशिश की है कि यह 1 से बंद हो। मैं पीआईडी का अनुमान लगा रहा हूं कि यह वर्तमान प्रक्रिया का पीआईडी है, न कि एक शुरू किया, और नई प्रक्रिया 'अगली' पिड जो 1 उच्च है। यदि ऐसा है, तो मैं केवल process.pid + 1
पर वापस भरोसा नहीं कर सकता क्योंकि मुझे कोई गारंटी नहीं है कि यह हमेशा सही रहेगा।
क्यों process.pid
नई प्रक्रिया के पीआईडी को वापस नहीं करता है, और मैं उसके बाद के व्यवहार को कैसे प्राप्त कर सकता हूं?
'shell = True' और '' '' सामान को हटाने का प्रयास करें। – Blender
मुझे एक ही समस्या है और मुझे मुश्किल से पता चला है, यह हमेशा पीआईडी + 1 नहीं है, यह पहले था, लेकिन अब यह मुझे +2 – andrei