系统调用与库函数系统调用的实现在内核中属于内核空间库函数的实现在函数库中属于用户空间。通过系统调用可以执行内核可以理解为操作系统的核心中的函数实现系统功能。例如printf需要访问内核中的函数去输出到屏幕上硬件系统调用执行过程1.对系统调用函数和内核函数进行编号使其一一对应上例如系统调用中5是open()函数对应内核中的5也是sys_open()函数2.当程序进行到open()这个函数时会产生0x80号中断同时将系统调用号发送给Eax寄存器3.内核接收到0x80号中断后去Eax寄存器中寻找系统调用号4.内核根据对应的系统调用号实现对应内核函数最后将函数结果发送给Eax寄存器5.系统调用返回Eax寄存器中的函数结果程序继续运行进程替换exec()全新进程的产生过程先由fork()复制当前进程再由exec()替换当前进程exec函数族成员函数execlexecleexeclpexecvexecveexecvp除了execve为系统调用外其余全为库函数#include unistd.h int execl(const char *path, const char *arg0, ..., /* (char *) NULL */);参数path新程序的完整路径如/usr/bin/ls。arg0通常为新程序的名称如ls。...可变参数列表表示命令行参数以(char *) NULL结尾。若第10行运行成功则进程已被替换成ps后续代码不会运行text进程先从bash处先复制一份再替换成ps进程替换进程保留原进程的PID、父进程的PPID6种exec函数的传参方式实践实现一个简单的bash了解为什么所有进程都是从bash处复制来的代码实现实现结果很简单的一段代码不过还不能传其他参数例如 ps -f我们作如下修改使其能传额外参数将控制界面写入的数据通过get_cmd()函数进行分割装到字符串数组里最后利用execvp直接传字符串数组的特性完成额外传参。get_cmd()函数内容如下strtok()函数可以将一段字符串以参数2分隔符分开同时会有指针停在上次分割的位置通过多次分割完成对buff额外传参的分割即可。这样一个可以传额外参数的mybash就完成了。