Linux-进程控制
在Linux中,进程控制主要涉及到创建、终止和管理进程。以下是一些常用的进程控制命令和函数:
fork()
:创建一个新进程(子进程),该进程是原始进程(父进程)的复制品。
#include <unistd.h>
pid_t fork(void);
exec()
:用新的进程替换当前进程的映像。
#include <unistd.h>
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ..., char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
wait()
:父进程等待一个子进程终止。
#include <sys/wait.h>
pid_t wait(int *status);
waitpid()
:等待一个指定的子进程终止。
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options);
kill()
:发送信号给进程。
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
exit()
:终止当前进程。
#include <stdlib.h>
void exit(int status);
getpid()
:获取当前进程的ID。
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
getppid()
:获取当前进程的父进程ID。
#include <sys/types.h>
#include <unistd.h>
pid_t getppid(void);
示例代码(创建一个子进程,子进程执行ls
命令并打印结果,然后子进程退出,父进程等待子进程结束并打印其终止状态):
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == -1) {
// 错误处理
perror("fork failed");
exit(EXIT_FAILURE);
} else if (pid == 0) {
// 子进程
execlp("ls", "ls", (char*)NULL);
// 如果exec调用失败,则子进程将执行以下代码
perror("execlp failed");
exit(EXIT_FAILURE);
} else {
// 父进程
int status;
pid_t wpid = waitpid(pid, &status, 0);
if (wpid == -1) {
perror("waitpid failed");
} else {
printf("子进程终止,PID=%d\n", wpid);
if (WIFEXITED(status)) {
printf("子进程正常结束,退出状态=%d\n", WEXITSTATUS(status));
} else {
printf("子进程异常结束\n");
}
}
}
return 0;
}
这段代码首先使用fork()
创建一个子进程,然后在子进程中使用execlp()
执行ls
命令。父进程则使用waitpid()
等待
评论已关闭