linux 进程处理
来源:互联网 发布:linux 命令行 网页显示 编辑:程序博客网 时间:2024/06/13 03:19
//====进程相关函数==============================================================
#include <unistd.h>
//成功返回进程ID,否则返回-1。
pid_t getpid(
void
);
//获取进程ID
pid_t getppid(
void
);
//获取父进程ID
pid_t getuid(
void
);
//获取进程用户ID
pid_t geteuid(
void
);
//获取进程有效用户ID
pid_t getgid(
void
);
//获取进程组ID
pid_t getegid(
void
);
//获取进程有效组ID
pid_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 <stdlib.h>
void
exit
(
int
status);
//退出线程
// 可使用"echo $?"命令来查看程序退出值
// return 1; == exit(1);
#include <sys/wait.h>
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 <signal.h>
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,发送给系统所有的进程;
//该代码片段来自于: http://www.sharejs.com/codes/cpp/6853
0 0
- LINUX僵尸进程处理
- linux 进程处理
- [Linux] 进程处理
- linux进程终止处理函数
- linux 僵死进程及处理
- linux 僵死进程及处理
- linux进程---信号处理函数
- linux进程调度 - 优先级处理
- linux启动、进程、文本处理
- linux 下处理僵尸进程
- Linux 僵尸进程的处理
- linux僵尸进程的处理
- linux下处理僵尸进程
- linux进程管理之信号处理
- Linux下僵尸进程的处理
- linux的进程优先级处理方法
- linux下的僵尸进程处理办法
- linux进程通信----信号的处理
- 该死的c语言的隐式函数声明法则
- 【Android 开发】: Android 消息处理机制之二: Message 中 obtain()源代码剖析
- wifi营销路由器已经悄悄走进了你的生活,无限商机唾手可得
- Qualcomm pmic充电流程分析(msm8660)
- Android获取状态栏、标题栏、ActionBar以及屏幕的高度
- linux 进程处理
- 【Android 开发】: Android 消息处理机制之三: Handler 中 sendMessage() 源代码剖析
- android开发 service生命周期
- Android开发——查找所需要出示权限的内容
- 图形化的电力处理软件系统介绍
- 利用Ptrace在Android平台实现应用程序控制
- 如何在Linux下跑UI测试,但是不打扰你的工作/Run UI tests in the background on Linux
- 【Android 开发】: Android 消息处理机制之四: Android 消息循环 Looper 及其源码解析
- cocos2d-X 网络动态下载资源图片