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 等不同程序
  • 实现自定义脚本执行平台、服务型任务处理器等

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

相关推荐
稚辉君.MCA_P8_Java7 分钟前
Java 基本数据类型 - 四类八种
java·linux·后端·mysql·架构
东木君_8 分钟前
芯外拾遗第二篇:编译、工具链、烧录,你真的搞懂了吗?
linux·单片机·操作系统·嵌入式
虚伪的空想家19 分钟前
HUAWEI A800I A2 aarch64架构Ubuntu服务器鲲鹏920开启 IOMMU/SMMU 硬件虚拟化功能
linux·服务器·ubuntu
赖small强44 分钟前
[Linux] 内核链表实现详解
linux·内核链表·双向循环链表·list.h·list_head
Linux技术芯1 小时前
浅谈kswapd按照什么原则来换出页面的底层原理
linux
獭.獭.1 小时前
Linux -- 线程控制
linux·pthread·线程分离·线程取消·线程局部存储·lwp·线程栈
feng_blog66881 小时前
环形缓冲区实现共享内存
linux·c++
chen36731 小时前
嵌入式AI Arm_linux_第一个Demo_让IPU跑起来
linux·arm开发·人工智能
2501_938791221 小时前
服务器恶意进程排查:从 top 命令定位到病毒文件删除的实战步骤
java·linux·服务器
LCG元2 小时前
SSH密钥对认证配置详解:告别密码登录,实现Linux服务器安全免密远程连接
linux