क्या विंडोज सीएमडी यूनिक्स शेल के निष्पादन के बराबर है?


9

क्या यूनिक्स शेल के "निष्पादन" के लिए विंडोज में कोई समकक्ष है? असल में, मुझे एक नई प्रक्रिया से बचने की ज़रूरत है, ताकि इनपुट / आउटपुट पाइप संरक्षित रहे, साथ ही प्रक्रिया आईडी भी।

संपादित करें:

तो, यहाँ मेरी समस्या है। मेरे पास एक ऐसी प्रक्रिया है जो एक स्क्रिप्ट शुरू करती है, और यह स्क्रिप्ट एक प्रक्रिया बी को निष्पादित करके समाप्त होती है। मुझे बी के सभी आउटपुट प्राप्त करने के लिए ए की आवश्यकता होती है, साथ ही बी को मारने में सक्षम होने की प्रक्रिया को मार डाला गया है (स्क्रिप्ट) ।

यूनिक्स पर, बी के साथ execउस काम को अंजाम देता है।


कोई समान नहीं है, कम से कम मानक विंडोज कमांड और कार्यक्रमों का उपयोग नहीं कर रहा है।
बजे जॉन गार्डनियर्स

यदि आप किसी अन्य बैच फ़ाइल के बजाय एक निष्पादन योग्य चलाने का प्रयास कर रहे हैं, तो ऐसा करने का कोई (समर्थित / यथार्थवादी) तरीका नहीं है। हालाँकि, इनपुट / आउटपुट पाइप आम तौर पर एक बैच फ़ाइल में चल रहे अनुप्रयोगों द्वारा विरासत में मिले हैं। यदि आप यह वर्णन कर सकते हैं कि आप ऐसा क्यों करना चाहते हैं, तो हम विकल्प सुझा सकते हैं।
हैरी जॉनसन

प्रक्रिया ए को पहले से ही बी के सभी आउटपुट प्राप्त करना चाहिए, जब तक कि यह स्क्रिप्ट ओवरराइड न हो जाए। क्या यह काम नहीं कर रहा है?
हैरी जॉनसन

माता-पिता की प्रक्रिया के दौरान मरने के लिए बच्चे की प्रक्रिया की व्यवस्था करने के लिए Win32 एपीआई का उपयोग करना संभव है, हालांकि कोई अंतर्निहित कमांड-लाइन विकल्प AFAIK नहीं है। यदि मैं कुछ स्रोत कोड प्रदान करता हूं (विज़ुअल सी ++ के लिए) क्या आप इसे बनाने में सक्षम हैं?
हैरी जॉन्सटन

@ हैरी मैं जावा से स्क्रिप्ट को फोर्क कर रहा हूं, इसलिए, अगर विचार ए 32 का उपयोग करने के लिए प्रक्रिया के लिए है, तो मुझे डर है कि मुझे काम करने की संभावना नहीं है, हालांकि मैं प्रयास के लिए आभारी हूं। बेहतर है कि केवल यह समझा देना संभव नहीं है, और मैं इसे उत्तर के रूप में स्वीकार करूंगा।
डैनियल सी। सोबरल

जवाबों:


7

AFAIK वहाँ नहीं है। विंडोज में कमी execv()है कि बैश निष्पादन कैसे करता है। callबैच फ़ाइलों को कॉल करने के लिए काम करता है (आसान, बस मौजूदा दुभाषिया में फ़ाइल की व्याख्या करें, बैश के .कमांड के समान ) लेकिन एक्सई के लिए नहीं।

इससे विंडोज पर किसी भी भाषा में स्क्रिप्ट के लिए एक-लाइनर आवरण स्क्रिप्ट लिखना असंभव हो जाता है। आपको हमेशा यही मिलेगा कि "बैच की नौकरी समाप्त करें?" Ctrl + C पर बकवास और बैच प्रक्रिया को मारने (Ctrl + C के साथ नहीं, कार्य प्रबंधक से कहते हैं) बच्चे की प्रक्रिया को नहीं मारेंगे। अब मैं इस रैपिंग को करने के लिए C टेम्पलेट फ़ाइल की तलाश कर रहा हूँ।

अद्यतन: Windows _execv()MSVCRT में अपनी POSIX संगतता परत में है, लेकिन AFAIK (यह परीक्षण नहीं किया है) यह सिर्फ एक आवरण है, CreateProcessइसलिए यह हमेशा एक नई प्रक्रिया बनाएगा, यह वर्तमान प्रक्रिया को प्रतिस्थापित नहीं कर सकता है।


2

मुझे लगता है कि कॉल वह करता है जो आप चाहते हैं, लेकिन मैं 100% निश्चित नहीं हूं।


4
यदि आप cmd.exe के एक नए उदाहरण को लॉन्च किए बिना, एक से एक बैच फ़ाइल चलाना चाहते हैं, तो कॉल सही उत्तर है।
हैरी जॉनसन

1

आप एक गतिशील बैच कमांड का निर्माण कर सकते हैं और इसे पिछले ऑपरेशन के आउटपुट के आधार पर निष्पादित कर सकते हैं। मुझे यकीन नहीं है कि यह आपके मामले में एक समाधान होगा, लेकिन निम्न कोड ठीक काम करता है।

SET yourDynamicCommand=SET var=1
%yourDynamicCommand%
ECHO var's value is %var%

यह कुछ भी नहीं करता है exec...
जकाउजी

-1
  • बैच-फाइलें निष्पादित करें :call
  • Exe-files को निष्पादित करें : कोई कमांड की आवश्यकता नहीं है, इसे सीधे कॉल करें/path/to/exe/something.exe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.