<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Process API | The .NET Blog</title><link>https://thedotnetblog.com/hi/tags/process-api/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>hi</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Tue, 26 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/hi/tags/process-api/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 11 ने अंततः प्रोसेस API को ठीक किया</title><link>https://thedotnetblog.com/hi/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/hi/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</guid><description>System.Diagnostics.Process को वर्षों में सबसे बड़ा अपडेट मिलता है। RunAndCaptureTextAsync, KillOnParentExit, SafeProcessHandle API, और स्टैंडर्ड हैंडल रीडायरेक्शन पर पूरा नियंत्रण — डेडलॉक बॉयलरप्लेट कोड की जरूरत नहीं।</description><content:encoded>&lt;p&gt;हर .NET डेवलपर जिसे कभी एक प्रोसेस शुरू करके उसका आउटपुट कैप्चर करना पड़ा है, उसने उसी खतरनाक बॉयलरप्लेट कोड का कोई न कोई वेरिएशन लिखा है: stdout से async रीड, stderr से async रीड, &lt;code&gt;WaitForExitAsync&lt;/code&gt;, दोनों स्ट्रीम को ड्रेन करना न भूलें वरना डेडलॉक हो जाएगा। यह एक जानी-पहचानी समस्या है जो वर्षों से चली आ रही है।&lt;/p&gt;
&lt;p&gt;.NET 11 अंततः इसे सही ढंग से ठीक करता है।&lt;/p&gt;
&lt;h2 id="runandcapturetextasync"&gt;RunAndCaptureTextAsync&lt;/h2&gt;
&lt;p&gt;मुख्य जोड़: एक सिंगल स्टैटिक मेथड जो एक प्रोसेस शुरू करता है, stdout और stderr कैप्चर करता है, और डेडलॉक के बिना एग्जिट का इंतजार करता है।&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAndCaptureTextAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dotnet&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;--version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StandardOutput&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;एक कॉल। कोई मैनुअल स्ट्रीम ड्रेनिंग नहीं। कोई सावधानी से रखा गया &lt;code&gt;WaitForExit&lt;/code&gt; नहीं। अगर आपको बस कुछ रन करना है और उसका आउटपुट चाहिए, तो यही वो API है।&lt;/p&gt;
&lt;p&gt;आउटपुट कैप्चर किए बिना एग्जिट का इंतजार करने के लिए &lt;code&gt;Process.RunAsync&lt;/code&gt; भी है।&lt;/p&gt;
&lt;h2 id="killonparentexit"&gt;KillOnParentExit&lt;/h2&gt;
&lt;p&gt;शुरू किए गए प्रोसेस की एक सामान्य समस्या: अगर पैरेंट क्रैश हो जाए या बंद हो जाए, तो चाइल्ड प्रोसेस अनाथ की तरह चलते रहते हैं। &lt;code&gt;KillOnParentExit&lt;/code&gt; आपको प्रोसेस शुरू करते वक्त घोषित करने देता है कि पैरेंट प्रोसेस के बंद होने पर चाइल्ड प्रोसेस भी बंद हो जाए।&lt;/p&gt;
&lt;p&gt;यह एक ऐसी सुविधा थी जो प्लेटफॉर्म-विशिष्ट तरीकों से मौजूद थी (Windows पर job objects, Linux पर prctl) लेकिन .NET से इस्तेमाल करने के लिए p/invoke या थर्ड-पार्टी लाइब्रेरी की जरूरत थी। अब यह &lt;code&gt;ProcessStartInfo&lt;/code&gt; पर एक फर्स्ट-क्लास प्रॉपर्टी है।&lt;/p&gt;
&lt;h2 id="safeprocesshandle-आधरत-api"&gt;SafeProcessHandle-आधारित API&lt;/h2&gt;
&lt;p&gt;नई लाइटवेट API सर्फेस पूर्ण &lt;code&gt;Process&lt;/code&gt; क्लास के बजाय &lt;code&gt;SafeProcessHandle&lt;/code&gt; के आसपास बनाई गई है। पूर्ण &lt;code&gt;Process&lt;/code&gt; क्लास बहुत सारी स्थिति लेकर चलती है और इसे ट्रिम करना मुश्किल है — &lt;code&gt;SafeProcessHandle&lt;/code&gt; पाथ उन एप्लीकेशन के लिए ज़्यादा ट्रिमर-फ्रेंडली है जिन्हें आउटपुट साइज़ कम करनी है (WASM, नेटिव AOT)।&lt;/p&gt;
&lt;h2 id="हडल-इनहरटस-पर-पर-नयतरण"&gt;हैंडल इनहेरिटेंस पर पूरा नियंत्रण&lt;/h2&gt;
&lt;p&gt;अपडेट में यह भी जोड़ा गया है कि एक चाइल्ड प्रोसेस कौन से हैंडल इनहेरिट करता है और स्टैंडर्ड हैंडल कैसे रीडायरेक्ट होते हैं, इस पर बारीक नियंत्रण। पहले आप stdin/stdout/stderr रीडायरेक्ट कर सकते थे, लेकिन OS स्तर पर ठीक-ठीक कौन से हैंडल इनहेरिट करने हैं यह नहीं बता सकते थे। नई APIs वो नियंत्रण देती हैं।&lt;/p&gt;
&lt;h2 id="यह-कय-मयन-रखत-ह"&gt;यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Process&lt;/code&gt; क्लास tooling, build सिस्टम, test रनर, और किसी भी एप्लीकेशन में उपयोग होती है जो अन्य executables को कॉल करती है। पुरानी API सर्फेस .NET Framework के ज़माने की थी। यह कोई ब्रेकिंग चेंज नहीं है — पुरानी API काम करती रहती है — लेकिन नए कोड को नई सर्फेस को प्राथमिकता देनी चाहिए।&lt;/p&gt;
&lt;p&gt;ट्रिम्ड एप्लीकेशन या AOT कंपाइलेशन परिदृश्यों के लिए, &lt;code&gt;SafeProcessHandle&lt;/code&gt; पाथ विशेष रूप से स्वागत योग्य है। पुरानी &lt;code&gt;Process&lt;/code&gt; क्लास बहुत सारा reflection-heavy कोड लाती थी जो ट्रिमिंग को जटिल बनाता था।&lt;/p&gt;
&lt;p&gt;मूल पोस्ट: &lt;a href="https://devblogs.microsoft.com/dotnet/process-api-improvements-in-dotnet-11/"&gt;Process API Improvements in .NET 11&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>