做亳州旅游网站的目的wordpress网站数据迁移
做亳州旅游网站的目的,wordpress网站数据迁移,百度移动网站提交,住建局证件查询系统进程相关函数pid_t fork()
创建一个子进程。
一次调用#xff0c;会返回两次。
子进程先运行和是父进程先进程#xff0c;顺序不确定。变量不共享。
子进程复制父进程的0到3g空间和父进程内核中的PCB#xff0c;但pid号不同。
功能#xff1a;通过该函数可以从当前进程中克…进程相关函数pid_t fork()创建一个子进程。一次调用会返回两次。子进程先运行和是父进程先进程顺序不确定。变量不共享。子进程复制父进程的0到3g空间和父进程内核中的PCB但pid号不同。功能通过该函数可以从当前进程中克隆一个同名新进程。克隆的进程称为子进程原有的进程称为 父进程。子进程是父进程的完全拷贝。子进程的执行过程是从fork函数之后执行。子进程与父进程具有相同的代码逻辑。返回值int 类型的数字。在父进程中成功 返回值是子进程的pid号 0。失败 返回-1在子进程中成功 返回值 0。fork成功后父子进程使用相同的代码段。父子进程开始运行的地方有所差异。获得pid相关的函数getpidpid_t getpid(void);功能:获得调用该函数进程的pid参数:缺省返回值:进程的pidgetppid parentpid_t getppid(void);功能:获得调用该函数进程的父进程pid号参数:缺省返回值:返回父进程id号父子进程关系子进程是父进程的一个复制品(副本)。从linux 2.6 之后 ubuntu 18 linux 5.4子进程在复制父进程内存空间的时候,执行写时复制。刚fork完毕子进程使用的内存空间全部都是父进程的(子进程共享父进程所以的空间)。随着时间的推移父子进程对某个变量或内存区域进行修改这个时候子进程才会开辟对应内存空间。这个技术就是写时复制。进程的终止8中情况1main 中return2exit() c库函数会执行io库的清理工作关闭所有 的流以及所有打开的文件。已经清理函数atexit。3_exit,_Exit 会关闭所有的已经打开的文件不执行清理函数。4)主线程退出5主线程调用pthread_exit异常终止6abort()7signal kill pid8)最后一个线程被pthread_cancle退出后的进程僵尸进程父进程创建子进程后子进程先消亡。对应用户内存空间释放子进程也不会被调度了。但是内核空间中的对应的pcb块没有释放。孤儿进程父进程创建子进程后父进程先消亡。子进程会寻找新的父进程。孤儿进程不用过多关注。因为他的回收问题由新的父进程回收。退出函数1.exit 库函数退出状态终止的进程会通知父进程自己使如何终止的。如果是正常结束终止则由exit传入的参数。如果是异常终止则有内核通知异常终止原因的状态。任何情况下负进程都能使用waitwaitpid获得这个状态以及资源的回收。void exit(int status)exit(1);功能:让进程退出,并刷新缓存区参数status:进程退出的状态返回值:缺省参数可选值EXIT_SUCCESS 0EXIT_FAILURE 1return 当该关键字出现在main函数中时候可以结束进程如果在其他函数中则表示结束该函数。exit - 刷新缓存区 - atexit注册的退出函数 - _exit2._exit 系统调用void _exit(int status);功能:让进程退出,不刷新缓存区参数:status:进程退出状态返回值:缺省进程空间的回收因为子进程退出后对应的pcb 没有释放。导致子进程并没有完全退出。如果父进程是一个需要长期运行并需要多次创建子进程(运行时长相对都比父的短)的进程那么时间一长linux内核空间就会有大量的僵尸进程的pcb 会导致linux 内核内存空间不足系统就不稳定或崩溃。可以使用ps 或top 查看pid_t wait(int *status);功能该函数可以阻塞等待任意子进程退出并回收该进程的状态。只能父进程回收子进程状态。参数status 进程退出时候的状态如果不关心其退出状态一般用NULL表示如果要回收进程退出状态则用WEXITSTATUS回收。返回值成功 回收的子进程pid失败 -1WIFEXITED(status) 是不是正常结束WEXITSTATUS(status) 使用这个宏去那返回值WIFSIGNALED(status) 是不是收到了信号而终止的WTERMSIG(status)如果是信号终止的那么是几号信号。非阻塞回收waitpid(-1,status,0)wait(status);pid_t waitpid(pid_t pid, int *status, int options);pid需要回收的子进程 -1 所有的子进程status 子进程退出时候的状态如果不关注退出状态用NULLoptions 选项0 表示回收过程会阻塞等待WNOHANG 表示非阻塞模式回收资源。函数不会 一直等待需要判断返回值来决定是否回收成功或继续尝试回收(waitpid外面套一个死循环)返回值成功 返回接收资源的子进程pid0 子进程没有退出需要下次尝试回收-1 错误。exec 族能执行本上的任意一个可执行文件。一般exec 会和fork 搭配使用。在子进程执行exec。从内存角度看 执行exec的进程的代码段会被新执行的程序所替换。当新程序执行结束则整个进程结束。执行exec之前执行exec 之后l -list 参数被一个个列出v -vector 向量在c中解释为数组参数被存储在数组中p -PATH ,系统的环境变量int execl(const char *path, const char *arg, ...);path需要执行新程序的路径文件名arg 是新程序所需要的参数列表结束标志NULLint execlP(const char *file, const char *arg, ...);file 需要执行新程序的文件名(默认在环境变量PATH中查找)arg 是新程序所需要的参数列表结束标志NULLint execv(const char *path, char *const argv[]);path需要执行新程序的路径文件名argv-存放参数的数组 最后一个参数是NULLint execvp(const char *file, char *const argv[]);file 需要执行新程序的文件名(默认在环境变量PATH中查找)argv-存放参数的数组 最后一个参数是NULL如果这个4个函数需要调用自己的 可执行程序。第一个参数 都按照 路径文件名的形式 填写就都能调用起来。system函数system功能 执行一个shell 命令 注意 这个命令不能是需要修改父进程的状态的 相关命令。执行的shell命令多为信息输出文件相关操作。 函数内部实现 使用的是 forkexec;int system(const char *command);command: 需要执行的shell命令返回值 -1 失败获得当前工作路径char *getcwd(char *buf, size_t size);buf是存储路径的字符数组size接收字符数组的最大长度返回值指向buf的指针NULL 失败改变当前工作路径int chdir(const char *path)path需要切换的路径返回值-1 失败0 成功