linux c语言怎样挂起线程进程

linux c语言怎样挂起线程进程,第1张

线程

可以用pthread_kill函数

传递信号SIGSTOP挂起

传递SIGCONT 恢复

进程

调用系统的stop挂起

或者用kill -stop 挂起

类似的 用SIGCONT 恢复。

这是从别的地方摘录的,不知有没有用。

vfork()

在写入时复制页面出现之前,Unix设计者已经关注fork紧跟着exec时的地址空间复制浪费问题。因此BSD开发者在3.0BSD公开了vfork()系统调用

#include <sys/types.h>

#include <unistd.h>

pid_t vfork (void)

成功调用vfork()和fork()的行为一样,除了子进程必须立即发起一个exec函数,或者通过调用_exit()退出(下一节讨论)。vfork()系统调用避免了地址空间和页表复制,通过挂起父进程直到子进程终止或者执行新的二进制镜像。在此之间,父进程和子进程共享地址空间和页表项(虽然没有写入时复制的语义)。实际上,在调用vfork()期间唯一做的事情是复制内核内部数据结构。因此,子进程不能修改地址空间内的任何内存。

vfork()系统调用是一个历史遗物,永远不应该被Linux实现。应该指出的是,尽管fork()使用了写入时复制,vfork()也比fork()更快,因为vfork()不需要复制页表项。无论如何,写入时复制的采用,削弱了fork()其它变体的需要。实际上直到Linux内核2.2.0版本,vfork()只是fork()的简单封装。由于对vfork()的需求远远小于对fork()的需求,这样一种vfork()实现是切实可行的。

严格地说,没有哪种vfork()实现是无bug的:考虑exec调用失败的情况!父进程将被挂起不确定时间,直到子进程决定自己该怎么做或者直到子进程退出。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8289570.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存