021 多语言协同执行(了解)

fork + exec 系列函数创建子进程并执行其他程序(跨语言衔接示例)

CSDN 相关文章 fork(2) - Linux 手册页 exec(3) - Linux 手册页

在 Linux 系统编程中,fork()exec() 是进程控制的两大核心。本文将演示如何使用 fork 创建子进程,再使用 exec 执行外部程序,展示多语言之间的 协同执行 过程。


1. fork + exec 基础原理

  • fork():复制当前进程,返回两次(一次给父进程,一次给子进程)
  • exec*():用新程序 替换当前进程映像(进程 ID 不变)

通常模式:

c 复制代码
pid_t pid = fork();
if (pid == 0)                               // 子进程执行新程序
{
    execl("/bin/ls", "ls", "-l", NULL);
    perror("execl");                        // 出错处理
}
else                                        // 父进程继续执行
{
    wait(NULL);                             // 等待子进程退出
}

2. 执行 Python 脚本的示例

1. Python 文件:script.py

python 复制代码
# script.py
print("Hello from Python script!")

2. C 程序执行 Python 脚本:

c 复制代码
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>

int main()
{
    pid_t pid = fork();
    if (pid == 0)                       // 子进程执行 python 脚本
    {
        execl("/usr/bin/python3", "python3", "script.py", NULL);
        perror("exec failed");
    }
    else                                // 父进程等待
    {
        wait(NULL);
        printf("Python 脚本执行完毕\n");
    }
    return 0;
}

编译并运行:

bash 复制代码
gcc run_python.c -o run_python
./run_python

运行结果示例:

csharp 复制代码
Hello from Python script!
Python 脚本执行完毕

3. 执行 C++ 程序的示例

1. C++ 程序:hello.cpp

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
    cout << "Hello, world!" << endl;
    return 0;
}

编译:

bash 复制代码
g++ hello.cpp -o hello_cpp

2. C 程序调用该可执行文件:

c 复制代码
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>

int main()
{
    pid_t pid = fork();
    if (pid == 0)
    {
        execl("./hello_cpp", "hello_cpp", NULL); // 执行 C++ 程序
        perror("exec failed");
    }
    else
    {
        wait(NULL);
        printf("C++ 程序执行完毕\n");
    }
    return 0;
}

编译并运行:

bash 复制代码
gcc run_cpp.c -o run_cpp
./run_cpp

运行结果示例:

复制代码
Hello, world!
C++ 程序执行完毕

4. 常见问题

问题 说明
exec 不执行? 路径错误、参数没加 NULL、权限不够
子进程未退出? 忘记 wait() 等待

5. 总结

fork + exec 提供了 Linux 编程中最灵活的跨语言进程调用方式。你可以:

  • 用 C 控制调度
  • 执行 Python、C++、Shell 等不同程序
  • 实现自定义脚本执行平台、服务型任务处理器等

此处仅演示最简单的 多语言协同执行,带环境变量、传参数等其他形式不涉及。

相关推荐
勤匠16 分钟前
spring shell 基础使用
java·linux·spring
珹洺1 小时前
Linux操作系统从入门到实战(七)详细讲解编辑器Vim
linux·编辑器·vim
赵健zj2 小时前
鸿蒙Next开发,配置Navigation的Route
android·linux·ubuntu
Ruimin05192 小时前
LSV负载均衡
linux·运维·服务器·负载均衡·lvs
好奇的菜鸟2 小时前
Linux 系统下的 Sangfor VDI 客户端安装与登录完全攻略 (CentOS、Ubuntu、麒麟全线通用)
linux·ubuntu·centos
AuroraDPY2 小时前
Linux 环境变量
linux·运维·服务器
Ronin3053 小时前
【Linux系统】进程切换 | 进程调度——O(1)调度队列
linux·运维·服务器·ubuntu
万象.3 小时前
Linux多进程
linux
苦瓜汤补钙3 小时前
论文阅读:WildGS-SLAM:Monocular Gaussian Splatting SLAM in Dynamic Environments
linux·论文阅读·机器学习