是的,Linux 完全可以创建多个进程。Linux 是一个多任务操作系统,支持同时运行多个进程。以下是关于 Linux 多进程创建的详细说明:
最常用的创建新进程的方法是使用 fork()
系统调用:
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程代码
printf("这是子进程,PID: %d\n", getpid());
} else if (pid > 0) {
// 父进程代码
printf("这是父进程,PID: %d,子进程PID: %d\n", getpid(), pid);
} else {
// fork失败
perror("fork失败");
return 1;
}
return 0;
}
可以通过循环创建多个子进程:
#include <unistd.h>
#include <stdio.h>
#define NUM_CHILDREN 5
int main() {
for (int i = 0; i < NUM_CHILDREN; i++) {
pid_t pid = fork();
if (pid == 0) {
// 子进程
printf("子进程 %d, PID: %d\n", i+1, getpid());
_exit(0); // 子进程退出
} else if (pid < 0) {
perror("fork失败");
return 1;
}
// 父进程继续循环
}
// 父进程等待所有子进程结束
for (int i = 0; i < NUM_CHILDREN; i++) {
wait(NULL);
}
printf("所有子进程已完成\n");
return 0;
}
fork()
创建的是当前进程的副本,如果需要运行不同的程序,可以使用 exec
系列函数:
#include <unistd.h>
#include <stdio.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程执行新程序
execlp("ls", "ls", "-l", NULL);
perror("exec失败"); // 只有exec失败才会执行到这里
_exit(1);
} else if (pid > 0) {
// 父进程
wait(NULL);
printf("子进程已完成\n");
} else {
perror("fork失败");
return 1;
}
return 0;
}
ps
:查看进程状态
ps aux
ps -ef
top
/htop
:实时查看进程状态
pstree
:以树状显示进程关系
kill
:发送信号给进程
kill -9 PID # 强制终止进程
多个进程之间可以通过以下方式通信: 1. 管道(Pipe) 2. 消息队列 3. 共享内存 4. 信号量 5. 套接字(Socket)
wait()
或 waitpid()
)Linux 的多进程机制是其强大功能的基础,合理使用可以大大提高程序的并发能力和稳定性。