博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux进程笔记
阅读量:6873 次
发布时间:2019-06-26

本文共 2672 字,大约阅读时间需要 8 分钟。

//====进程相关函数==============================================================#include 
//成功返回进程ID,否则返回-1。pid_t getpid(void); //获取进程IDpid_t getppid(void);//获取父进程IDpid_t getuid(void); //获取进程用户IDpid_t geteuid(void);//获取进程有效用户IDpid_t getgid(void); //获取进程组IDpid_t getegid(void);//获取进程有效组IDpid_t fork(void); //对父进程,返回新创子进程ID;对子进程,返回0;失败返回-1。 //子进程复制父进程的堆栈段和数据段的内容,但和父进程共用代码段。 // 父子进程的不同点: // 1. 进程ID和父进程ID不同,但调度机会均等。 // 2. 子进程的time_utime,time_stime,time_cutime,time_ustime被清零。 // 3. fork函数返回值不同。 // 4. 文件锁不会被继承。 // 5. 子进程清理未处理的闹钟信号和未决信号。 // 导致fork失败的原因: // 1.系统已有太多进程; // 2.调用fork函数的用户的进程太多;pid_t vfork(void); //创建公用父进程地址空间的子进程 // vfork 与 fork 的区别: // vfork 产生的子进程与父进程公用地址空间,可影响父进程。更像是线程。 // vofrk 产生的子进程一定先运行,父进程等待子进程运行完以后再运行。 // 注意:不要在任何函数中调用vfork;int setuid(uid_t uid); //改变进程的实际用户ID和有效用户ID,成功返回0;失败返回-1.#include
void exit(int status); //退出线程 // 可使用"echo $?"命令来查看程序退出值 // return 1; == exit(1);#include
pid_t wait(int *statloc);//获取子进程结束状态 // 返回子进程ID,并将结束信息保存在statloc指向的内存空间 // 状态: 判断宏 : 取值宏: // 进程正常退出 : WIFEXITED(status) WEXITSTATUS(status) // 进程异常退出 : WIFSIGNALED(status) WTERMSIG(status) // 进程暂停 : WIFSTOPPED(status) WSTOPSIG(status) // 只能等待第一个退出的进程pid_t waitpid(pid_t pid, int *statloc, int options);//用于等待指定的进程退出 //参数pid : -1,任意子进程; >0,进程ID == pid; 0, 组ID == pid; < -1, 组ID == pid绝对值; //参数options : // WCONTINUED : 当子进程在暂停后继续运行,且其状态未上报,则返回其状态; // WNOHANG : 当所等待的进程未结束运行时阻塞,waitpid直接返回; // WUNTRACED : 子进程暂停时,其状态一直未上报,则返回其状态;#include
void (*signal(int signo, void (*func) (int))) (int); //参数signo : 需要加载处理的信号编号,例如SIGKILL等.编号是整数宏,定义在signal.h中。 //参数func : 函数指针,捕捉信号后的响应函数,该参数有以下3个可能值 : // SIG_IGN : 忽略该信号,该宏在signal.h中定义: #define SIG_IGN ((void *)(*)()) 1 // SIG_DFL : 默认处理方式,该宏在signal.h中定义: #define SIG_IGN ((void *)(*)()) 0 // 其他已定义的指针函数 : 信号处理函数原型: void handler(int); // 函数的返回值是一个函数指针,该函数指向上一次的信号处理程序。该函数与参数func表示的一致 // 如果出错,则signal返回SIG_ERR(在signal.h中定义,#define SIG_ERR ((void *)(*)()) -1)。 //由于signal函数过于复杂,使用typedef进行如下简化: typedef void HANDLER (int); HANDLER *signal (int signo, HANDLER *handler); //Linux不允许用户创建新信号,但提供SIGUSR1和SIGUSR2专门用于应用程序间进行信号通信。int kill(pid_t pid, int signo);//向另外一个进程发送信号//参数pid的取值及语义:// >0,发送给进程ID为pid的进程;// =0,发送给进程组ID和该进程相同的进程;// <0,发送给进程组内进程ID为pid的进程;//=-1,发送给系统所有的进程;//-----------------------------------------------------------------------------------------------------

转载于:https://www.cnblogs.com/xuejianhui/archive/2012/11/21/2780280.html

你可能感兴趣的文章
containerd项目正式从CNCF毕业
查看>>
与广告“互动”—情景互动式创意广告
查看>>
使用外部表查看ORACLE报警日志
查看>>
业务发展如何利用创新驱动力量?
查看>>
云数据加密公司LOCKet获千万级Pre-A融资
查看>>
爱尔兰WElink Energy宣布在葡萄牙建立220MW太阳能光伏项目
查看>>
如何从敏捷到精益地修复bug与解决问题
查看>>
开启智慧新生活 新余市智慧城市建设全省率先
查看>>
智慧东湖让城市慢游更幸福
查看>>
陕西联通推进高速公路WiFi覆盖
查看>>
Linux之iconv转换文本格式的问题
查看>>
linux 用户权限和组权限
查看>>
RPM的使用
查看>>
我的友情链接
查看>>
lvs
查看>>
原型图设计软件
查看>>
setTimeout和setIntelval的区别
查看>>
[C#]通过方法获得游戏人数和玩家姓名
查看>>
How to rotate a bitmap
查看>>
spring常见注解
查看>>