2009-05-16 14 views
7

मैं अपने मैन पेज को पढ़ रहा हूं लेकिन यह अभी भी यह पता लगाने में सफल नहीं हुआ है कि यह कैसे काम करता है। कॉलिंग सिस्टम() पर, एक नई बाल प्रक्रिया फोर्कड है और इसमें शेल बाइनरी exec() - ed है? हालांकि यह एक बेवकूफ अनुमान हो सकता है।सिस्टम() वास्तव में लिनक्स में कैसे काम करता है?

उत्तर

10

हां, सिस्टम() अनिवार्य रूप से पास की गई कमांड स्ट्रिंग के लिए एक कांटा() और exec() "sh -c" है। एक उदाहरण कार्यान्वयन (eglibc से, हाल ही में glibc से फोर्क किया गया) here पाया जा सकता है।

+0

धन्यवाद, वह लिंक वास्तव में सहायक था :) – user108127

1

हां, सिस्टम ("फू बार") execv ("/ bin/sh", ["sh", "-c", "foo bar"] के बराबर है)।

+1

पॉज़िक्स की आवश्यकता है कि सिस्टम() SIGINT और SIGQUIT को अनदेखा करें और SIGCHLD ब्लॉक करें। –

+0

हां। उदाहरण कार्यान्वयन लांस ने उस पर ध्यान दिया। – user108127

संबंधित मुद्दे