Xét đoạn code dưới đây:giá trị trả về trong vfork) hệ thống (gọi
int main()
{
int pid;
pid=vfork();
if(pid==0)
printf("child\n");
else
printf("parent\n");
return 0;
}
Trong trường hợp vfork() không gian địa chỉ được sử dụng bởi quá trình cha mẹ và quá trình con là cùng, sao chép để duy nhất của biến pid nên ở đó. Bây giờ tôi không thể hiểu làm thế nào biến pid này có thể có hai giá trị được trả về bởi vfork() tức là không cho con và không cho cha mẹ?
Trong trường hợp fork() không gian địa chỉ cũng được sao chép và có hai bản sao của biến pid trong mỗi đứa trẻ và cha mẹ, vì vậy tôi có thể hiểu được trong trường hợp này hai bản khác nhau có thể có giá trị khác nhau được trả về bởi ngã ba() nhưng không thể hiểu trong trường hợp vfork() cách pid có hai giá trị được trả về bởi vfork()?
Đó là nguy hiểm - bạn có thể 'exec()' hoặc '_exit()' trong ['vfork()'] (http://pubs.opengroup.org/onlinepubs/009695399/toc.htm) 'd con , nhưng đó chỉ là về nó. Khá nhiều thứ khác dẫn đến hành vi không xác định. Khuyến nghị: không sử dụng ['vfork()'] (http://pubs.opengroup.org/onlinepubs/007908799/xsh/vfork.html); thực sự, tôi thậm chí sẽ không bận tâm để học cách sử dụng nó một cách an toàn. Nó giống như 'gets()', một hàm mà tốt nhất là giả vờ không tồn tại. –
@JonathanLeffler: 'vfork()' khá hữu ích cho các hệ thống MMU-less. – ninjalj
Vâng, tôi đồng ý với u chúng tôi không nên sử dụng nó, nhưng tôi đã sử dụng vfork để giải quyết một vấn đề về tạo cây quá trình và giao tiếp giữa các quy trình của các cấp độ khác nhau của cây, trong trường hợp đó vfork rất hữu ích. Tôi sẽ giữ lời khuyên của bạn. –