You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Shell脚本调用C程序?C客户端Socket后台化及脚本嵌入问题

问题解答

1. 如何从Shell脚本中调用C程序?

要在Shell脚本里调用C程序,分两步就能搞定:

  • 第一步:编译C程序为可执行文件
    先用gcc把你的.c源码文件编译成可执行程序,比如你的C文件叫client_socket.c,执行命令:
    gcc client_socket.c -o client_socket
    
    这会生成一个名为client_socket的可执行文件(你可以自定义名字)。如果你的Socket程序依赖额外的库(比如多线程库pthread),要把库参数加上,比如:
    gcc client_socket.c -o client_socket -lpthread
    
  • 第二步:在Shell脚本中调用可执行文件
    直接在脚本里写入可执行文件的路径即可——如果可执行文件和脚本在同一目录,用./client_socket;如果是放在固定目录(比如/usr/local/),就写绝对路径/usr/local/client_socket。

2. 把C客户端Socket程序整合到你的Bash脚本中

看你的示例脚本,原来的perl socket.pl就是调用外部程序的位置,你只需要把这行替换成你的C可执行文件调用即可,同时我帮你优化了脚本里的PID管理问题(原来的写法会导致停止命令无法正确终止目标进程):

步骤1:编译你的C客户端程序

假设你的C源码文件是client_socket.c,先编译它,然后把生成的可执行文件放到/usr/local/目录下(和脚本里cd /usr/local/的路径对应):

gcc client_socket.c -o /usr/local/client_socket

步骤2:修改你的Bash脚本

把脚本里的perl socket.pl替换成你的C可执行文件调用,同时修正PID写入逻辑:

#!/bin/bash
case "$1" in
    start)
        rm -f /var/run/alarm.pid
        # 将循环逻辑放到后台运行,并获取它的PID写入文件
        (while true
        do
            cd /usr/local/
            # 替换成你的C可执行文件调用
            ./client_socket
            sleep 11
        done) &
        # $! 代表最近一个后台进程的PID,写入pid文件
        echo $! >> /var/run/alarm.pid
        ;;
    stop)
        kill -9 $(cat /var/run/alarm.pid)
        rm -f /var/run/alarm.pid
        echo stop
        exit 0
        ;;
esac
exit 0

额外提示:让程序脱离终端后台运行

如果想让程序在你关闭终端后依然保持运行,可以在后台运行的循环前加上nohup,修改后的循环部分如下:

nohup (while true
do
    cd /usr/local/
    ./client_socket
    sleep 11
done) &

内容的提问来源于stack exchange,提问作者mery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:41:52