1.进程
1.1概念
进程是程序的一次动态执行过程,包括创建、调度、消亡,是程序执行和资源(内存)管理的最小单位
1.2相关系统调用
1.2.1fork、exec
-
fork
-
头文件:
-
#include <sys/types.h>
-
#include <unistd.h>
-
-
原型:pid_t fork(void);
-
返回值
-
on success,the PID of the child process is returned in the parent, and 0 is returned inthe child. on failure,-1 is returned in the parent,no child process is created,anderrno is set appropriately.
-
-
-
exec函数族
-
exec函数族提供了一种在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。
-
1.2.2wait和waitpid
-
wait
-
头文件:
-
<sys/types.h>
-
<sys/wait.h>
-
-
原型:
-
pid_t wait(int *status);
-
-
描述:
-
调用该函数使进程阻塞,直到任一个子进程结束或者是该进程接收到了一个信号为止。如果该进程没有子进程或者其子进程己经结束,wait函数会立即返回。
-
-
参数:
-
status的指针,用来保存子进程的退出状态。 - status为空,表示忽略子进程的退出状态 - status不为空,表示保存子进程退出的状态
-
-
返回值 :
-
成功返回进程号;失败返回-1
-
-
宏
-
- WIFEXITED(wstatus) :如果子进程是通过调用 exit(3) 或 _exit(2) 或从 main() 函数返回而正常终止的,则返回 true 。
-
- WEXITSTATUS(wstatus) :返回子进程的退出状态。退出状态是子进程在调用 exit(3) 或 _exit(2) 或在 main() 函数的返回语句中指定的状态参数的最低有效8位。只有当 WIFEXITED 返回 true 时,才应使用此宏。
-
- WIFSIGNALED(wstatus) :如果子进程是被信号终止的,则返回 true 。
-
- WTERMSIG(wstatus) :返回导致子进程终止的信号编号。只有当 WIFSIGNALED 返回 true 时,才应使用此宏。
-
- WCOREDUMP(wstatus) :如果子进程产生了一个核心转储文件,则返回 true 。这个宏应该只在 WIFSIGNALED 返回 true 时使用。需要注意的是,这个宏在POSIX.1-2001标准中没有指定,并且在某些UNIX实现中不可用。
-
- WIFSTOPPED(wstatus) :如果子进程被信号暂停,则返回 true 。这只有在使用 WUNTRACED 调用或子进程正在被跟踪(参见 ptrace(2) )时才可能发生。
-
- WSTOPSIG(wstatus) :返回导致子进程停止的信号编号。只有当 WIFSTOPPED 返回 true 时,才应使用此宏。
-
- WIFCONTINUED(wstatus) :(自Linux 2.6.10起)如果子进程通过 SIGCONT 信号恢复执行,则返回 true 。
-
-
示例:
1.2.3exit、_exit、return
① exit 函数:
- 声明: void exit(int status);
- 功能: exit 函数用于正常终止程序的执行,并将指定的退出状态码传递给操作系统。它会执行一系列清理操作,包括关闭打开的文件、释放动态分配的内存等。然后将控制权返回给操作系统。
- 注意事项: exit 函数会调用所有已注册的 atexit 函数,这些函数可以在程序中注册,用于在程序退出之前执行一些特定的操作。
② _exit 函数:
- 声明: void _exit(int status);
- 功能: _exit 函数用于立即终止程序的执行,不会进行任何清理操作。它会直接将退出状态码传递给操作系统,并立即返回控制权给操作系统。
- 注意事项:由于 _exit 函数不会执行清理操作,因此可能会导致一些资源泄漏,如未关闭的文件描述符、未释放的内存等。
③ return 语句:
- 功能: return 语句用于从函数中返回一个值,并将控制权返回给调用该函数的地方。它可以在任何函数中使用,包括 main 函数。
- 注意事项: 在 main 函数中使用 return 语句可以提前终止程序的执行。
总结:
- exit 函数和 _exit 函数都可以用于终止程序的执行,但 exit 函数会刷新缓冲区操作,而 _exit 函数不会刷新。
- return 语句用于从函数中返回一个值,并将控制权返回给调用该函数的地方。
1.3守护进程
1.3.1特点
从系统启动开始运行,系统关闭时停止运行;后台进程,与终端无关。
1.3.2创建
①创建子进程,父进程退出
②在子进程中创建新会话
③改变当前目录为根目录
⑤重设文件权限掩码
⑥关闭文件描述符
示例:
1.4通信
1.4.1管道
①无名管道
②有名管道