Linux PowerShell में 'nohup' के बराबर क्या है?

Nov 06 2020

मैं बहुत अच्छी तरह से डुप्लिकेट प्रश्न के अस्तित्व को जानता हूं । लेकिन उस प्रश्न का उत्तर दिया गया है और मुझे नहीं लगता कि यह मूल प्रश्न का उत्तर है।

$ nohup commandरहता क्रियान्वित आदेश भले ही माता-पिता की प्रक्रिया nohup मरता की (शेल)। अधिक यहाँ जानकारी: क्या nohup और एम्परसेंड के बीच का अंतर है ।

Win32 एपी के मामले में, मैं देखता हूं कि जब लाइन एक प्रक्रिया को समाप्त कर रही है, तो यह किसी भी बच्चे की प्रक्रिया को समाप्त नहीं करता है जो प्रक्रिया बनाई गई है। किसी प्रक्रिया को समाप्त करना WH_CBT हुक प्रक्रियाओं के लिए सूचना उत्पन्न नहीं करता है। । यह वांछित व्यवहार है जिसके बारे में मैं पूछ रहा हूं। यह स्वचालित रूप से win32 के साथ काम करता है। लेकिन linux के साथ पॉवरशेल के Start-Jobअर्थ में शब्‍दशास्‍त्र के संदर्भ में यह केवल बैकग्राउंड जॉब है, क्‍योंकि जब पॉवरशेल मार दिया जाता है तो यह मार जाता है।

उदाहरण:

➜  ~ powershell-preview -c "Start-Job { /bin/sleep 1000 }"

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
1      Job1            BackgroundJob   Running       True            localhost             /bin/sleep 1000

➜  ~ ps ux  | grep sleep
mvaidya   166986  0.0  0.0   9032   664 pts/11   S+   18:59   0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox sleep

जवाब

2 mklement0 Nov 06 2020 at 09:23

Start-JobPowerShell v6 + के &बैकग्राउंड ऑपरेटर का उपयोग करना एक विकल्प नहीं है, क्योंकि नौकरी समाप्त करने से शुरू की गई बाल प्रक्रियाएं भी समाप्त हो जाएंगी, कौन सी नौकरियां हैं - विंडोज पर और यूनिक्स जैसे प्लेटफार्मों पर

हालाँकि, आप cmdlet के nohupमाध्यम से समान व्यवहार प्राप्त कर सकते हैं Start-Process:

पर यूनिक्स की तरह प्लेटफार्मों , आप को जोड़ सकते हैं Start-Processसाथ nohup:
निम्न उदाहरण की शुरूआत एक पृष्ठभूमि PowerShell उदाहरण है कि रहता है जिंदा आप बंद करने के बाद भी टर्मिनल की शुरूआत; यह .हर सेकंड का उत्सर्जन करता है , और वर्तमान निर्देशिका nohupमें फ़ाइल nohup.outमें stdout और stderr आउटपुट दोनों को एकत्र करता है , अगर यह पहले से मौजूद है तो ऐसी फ़ाइल में संलग्न होता है:

# Runs for 2 minutes and appends both stdout and stderr output to ./nohup.out
Start-Process nohup 'pwsh -nop -c "1..120 | % { write-host . -nonewline; sleep 1 }"'

पर विंडोज , जहां Start-Processडिफ़ॉल्ट रूप से नए कंसोल विंडो में एक स्वतंत्र प्रक्रिया बनाता है, तो आप उपयोग कर सकते हैं -WindowStyle Hiddenएक छिपा हुआ विंडो जिंदा शुभारंभ खोल की स्वतंत्र रूप से बना रहे यह है कि इस प्रक्रिया शुरू करने के लिए।

# Runs for 2 minutes and appends success output to ./nohup.out
Start-Process -WindowStyle Hidden pwsh '-nop -c "1..120 | % { Add-Content -nonewline nohup.out -Value .; sleep 1 }"'