كيف يمكن للبي تي واي سيد كشف إذا خرجت من الكتابة البعيدة الرقيق؟
سؤال
وأنا أستخدم أسلوب BSD أزواج بي تي واي / الكتابة البعيدة لتنفيذ تشغيل قذيفة الفرعية. عندما ينهي المستخدم قذيفة الفرعية، كيف يمكنني كشف في عملية الرئيسي الذي حدث هذا؟ أنا أستخدم حدد (nfds، وread_fds، NULL، NULL، والمهلة)؛ مع واصف الماجستير ملف بي تي واي المنصوص عليها في read_fds على الجانب الرئيسي.
المحلول 2
ولقد وجدت الإجابة على هذا السؤال من خلال دراسة الكود المصدري telnetd وجدت في حزمة inetutils GNU. في telnetd، فإنها تستخدم معالج SIGCHLD مثل هذا:
int status;
pid_t pid = waitpid((pid_t)-1, &status, WNOHANG);
syslog (LOG_INFO, "child process %ld exited: %d",
(long) pid, WEXITSTATUS(status));
// do cleanup code
نصائح أخرى
وعادة ما يتم إنشاء المستوى الفرعي من قبل fork()
من نوع ما. يتم إرجاع PID الطفل في سيد، والتي يمكن أن تحقق (مع waitpid()
، ربما) إذا كان لا يزال قيد التشغيل.
لا تنتمي إلى StackOverflow