मैं प्रतिक्रिया करने के लिए देर हो रही है, लेकिन यहाँ कैसे मैं यह कर रहा है:
const char *progname = "./yourProgName";
const char *argument1 = "arg1";
const char *argument2 = "arg2";
if (fork() == 0)
{
// We are the child process, so replace the process with a new executable.
execl(progname, progname, argument1, argument2, (char *)NULL);
}
// The parent process continues from here.
सबसे पहले, आप कांटा() प्रक्रिया एक नई प्रक्रिया बनाने के लिए। यह अभी भी वही स्मृति स्थान पुराना है। कांटा() दोनों माता-पिता और बाल प्रक्रियाओं के लिए रिटर्न। अगर कांटा() शून्य लौटाता है, तो आप बच्चे की प्रक्रिया कर रहे हैं। तब बाल प्रक्रिया प्रक्रिया मेमोरी को एक नई फाइल से बदलने के लिए execl() का उपयोग करती है।
ध्यान दें कि progname execl() को दो बार दिया जाता है। पहला यह है कि execl() वास्तव में चलाने की कोशिश करेगा, दूसरा argv [0] है। आपको दोनों को प्रदान करना होगा या तर्क गणना एक से बंद हो जाएगी। वांछित निष्पादन योग्य छवि को खोजने के लिए प्रोनमेम में सभी आवश्यक पथ जानकारी होनी चाहिए।
मैं इस उदाहरण में दो तर्क देता हूं, लेकिन आप जितना चाहें उतना पास कर सकते हैं। इसे न्यूल के साथ समाप्त किया जाना चाहिए, और मुझे लगता है कि आपको इसे दिखाने के रूप में इसे (char *) के रूप में डालना होगा।
यह दृष्टिकोण आपको तर्कों और एक अद्वितीय पिड के साथ पूरी तरह से स्वतंत्र प्रक्रिया प्रदान करता है। यह पेरेंट प्रक्रिया समाप्त होने के बाद लंबे समय तक चलना जारी रख सकता है, या यह माता-पिता के समक्ष समाप्त हो सकता है।
'फोर्क' एक चल रही प्रक्रिया की एक प्रति बनाता है, यह * प्रक्रिया * शुरू नहीं करता है। – Beta
पढ़ें http://advancedlinuxprogramming.com/ –