这个程序演示了 Linux 中进程创建与程序替换的经典模型——fork-and-exec。整体框架分为三个部分：

main() 函数：程序入口，调用 fork() 创建子进程。fork() 返回值为 0 时表示当前处于子进程，返回值大于 0 时表示当前处于父进程。父进程调用 parent() 打印自身和子进程的 PID，然后通过 wait(NULL) 阻塞等待子进程结束后才退出。
child() 函数：子进程执行的逻辑。先打印自己的 PID，然后调用 execve() 将当前进程的映像替换为 /bin/ls 程序来执行 ls 命令。如果 execve 调用成功，子进程的代码就被 ls 完全替换，不会再返回；如果失败则报错退出。
parent() 函数：父进程执行的逻辑，打印父进程自身的 PID 以及子进程的 PID。
整体流程：main 中 fork 创建子进程 → 子进程执行 child()，通过 execve 运行 ls → 父进程执行 parent() 打印信息，然后 wait 等待子进程结束 → 程序退出。