سؤال

أحاول إنشاء عملية طفل في عملية أخرى. أنا أكتب كلا البرنامجين بلغة C. أولاً ، أكتب عملية وهمية ستكون عملية الطفل. ما تفعله هو فقط كتابة سلسلة على الشاشة. إنه يعمل بشكل جيد من تلقاء نفسه. ثم أكتب برنامجًا آخر سيكون عملية الوالدين. ومع ذلك ، لا يمكنني تحقيق ذلك. أحاول استخدام وظائف Fork و Execl معًا ، لكنني تفشل. أريد أيضًا أن لا تنتهي عملية الطفل حتى تنتهي عملية الوالد.

كيف يجب أن أكتب عملية الوالدين؟

شكرًا.

هنا هو رمز عملية الطفل:

#include <stdio.h>

int main(void) {
  while(1) {
    printf("*");
    sleep(1);
  }
}

وهنا هي عملية الوالدين:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void) {
  if (fork()) {
    while(1) {
      printf("-\n");
      sleep(5);
    }
  } else {
    execl("./", "dummy", (char *)0);
  }
}
هل كانت مفيدة؟

المحلول

ما هو الإصدار الذي تستخدمه؟إذا ذهبت إلى صفحة API ، لديك رمز المصدر هذا: giveacodicetagpre.

لذلك الطريقة موجودة، حددها مباشرة من البداية (السطر 33 أكثر أو أقل).
Look هنا للحصول على وثائق الطريقة: http://api.joomla.org/joomla-platform/jroute.html#method_

نصائح أخرى

الاستخدام الأساسي للشوكة في ج

int PID = fork();

if( PID < 0 ) {
    //fail
    return PID;
}
else if( !PID ) {
    //child process
    return exec( prog, args );
} 
else {
    //parent process
    return 0;
}

لا توجد وسيلة لإجبار عملية الطفل على "عدم الإنهاء" عند الانتهاء (ستظل قادرًا في الوالد wait لكي تحصل على معلومات حول كيفية إنهاءها ، ولكن هذا يتعلق به). بصرف النظر عن ذلك ، أي من الأمثلة العديدة fork/exec على الويب ، مثل هذا, ، يجب أن تعمل - لماذا لا تجربها ومعرفة ما إذا كان أداء كما ترغب في ذلك (في هذه الحالة ستحتاج فقط إلى تغيير كل ما كنت تفعله بشكل مختلف في محاولتك الخاصة). إذا لم ينجح الأمر على النحو المطلوب (باستثناء الاستحالة لكل الجملة الأولى في هذا A ؛-) ، فيرجى تحريرك لإضافة تفاصيل وفيرة حول كيفية تصرف الكود بشكل مختلف عما تتوقعه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top