Яка різниця між waitpid() і wait()?
2024wait(): у разі успіху повертає ідентифікатор завершеного дочірнього процесу; у разі помилки повертається -1. waitpid(): у разі успіху повертає ідентифікатор дочірнього процесу, стан якого змінився; якщо було вказано WNOHANG і один або кілька дітей, визначених pid, існують, але ще не змінили стан, тоді повертається 0.
Для цього використовується функція waitpid(). коли батьківський процес хоче чекати певного дочірнього процесу. У функції ми передаємо ідентифікатор дочірнього процесу, на який ми хочемо чекати, і батьківський процес блокується, доки цей дочірній процес не завершиться.
Якщо pid більше 0, waitpid() очікує завершення конкретного дочірнього процесу, ідентифікатор процесу якого дорівнює pid. Якщо pid дорівнює нулю, waitpid() очікує завершення будь-якого дочірнього процесу, ідентифікатор групи процесу якого дорівнює ідентифікатору викликаючого. Якщо pid дорівнює -1, waitpid() очікує завершення будь-якого дочірнього процесу.
Системний виклик waitpid(). призупиняє виконання поточного процесу, доки дочірній елемент, указаний аргументом pid, не змінить стан. За замовчуванням waitpid() очікує лише завершених дітей, але цю поведінку можна змінити за допомогою аргументу options, як описано нижче.
Призупиняє процес виклику, доки не завершиться будь-який із дочірніх процесів. Точніше, wait() призупиняє процес виклику, доки система не отримає інформацію про статус завершеного дочірнього елемента. Якщо система вже має інформацію про статус завершеного дочірнього процесу під час виклику wait(), wait() повертає негайно.
wait() і waitpid() Системний виклик wait() призупиняє виконання викликаючого процесу до завершення роботи одного з його дочірніх процесів. Виклик очікування(&статус) еквівалентний: waitpid(-1, &статус, 0); Системний виклик waitpid() призупиняє виконання процесу виклику, доки дочірній елемент, указаний аргументом pid, не змінить стан.
waitpid повертає ідентифікатор процесу, статус виходу якого повідомляється в статусі. В OS/161 це завжди значення pid. Якщо ви застосовуєте WNOHANG, і задано WNOHANG, а процес, визначений pid, ще не завершився, waitpid повертає 0.