פורסם 2012 בנובמבר 2913 שנים שלום ,בפונקציה, שצירפתי את הקוד שלה, אני אמור לשלוח סיגנל SIGTERM כדי לסגור תהליך מסוים. (מספרי התהליכים נשמרים ברשימה ואני צריך לסגור את כל התהליכים ברשימה)אם התהליך התעלם מהסיגנל אז אחרי 5 שניות אני שולח סיגנל SIGKILL .מה שקורה בפועל, שעם הכניסה לפונקציה יש המתנה של 5 שניות ואז הדפסה ברצף של כל שורות ההדפסה הרלוונטיות.אני אשמח אם מישהו יוכל להסביר לי למה אין המתנה של 5 שניות אחרי הprintf הראשון.תודהStatus free_all_processes(){ int i = 1,pid; time_t start,end; double elapsed; Process* pPtr = pList.root; while (pPtr != NULL) { elapsed = 0; pid = pPtr->pid; kill(pid,SIGTERM); printf("[%d] %s – Sending SIGTERM...",i++,pPtr->command); time(&start); while (elapsed < 5) { time(&end); elapsed = difftime(end,start); } if (findProcess(pid) == 1) { printf("...(5 sec passed) Sending SIGKILL"); kill(pid,SIGKILL); } printf("Done.\n"); pPtr = pPtr->next; } return QUIT;}
פורסם 2012 בנובמבר 2913 שנים אתה צריך לדאוג לרוקן את באפר הפלט אחרי ההדפסה ע"י קריאה ל-(fflush(stdout.חוץ מזה, זו דרך ממש גרועה לחכות 5 שניות, כי היא סתם זוללת זמן של המעבד. במקום זה תשתמש בפונקציה sleep.
פורסם 2012 בנובמבר 3013 שנים מחבר בתהליך הראשון שאני מנסה להרוג אכן יש המתנה של 5 שניות אבל באיטרציות הבאות של הלולאה השורות נדפסה מודפסות אחרת אחרי השנייה ללא המתנה..Status free_all_processes(){ int i = 1,pid; Process* pPtr = pList.root; /* For each process in the process list, send a signal SIGTERM. If the process does not * react, there will be sent another signal(SIGKILL) */ while (pPtr != NULL) { pid = pPtr->pid; kill(pid,SIGTERM); printf("[%d] %s – Sending SIGTERM...",i++,pPtr->command); fflush(stdout); sleep(5); if (findProcess(pid) == 1) /* if the process exists in the process list - kill it! */ { kill(pid,SIGKILL); printf("...(5 sec passed) Sending SIGKILL"); fflush(stdout); } printf("Done.\n"); fflush(stdout); pPtr = pPtr->next; } return QUIT;}זה הקוד אחרי השינוי
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.