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

如何让I/O受限非交互式进程动态创建新线程,展示线程数可变?

给目标进程动态创建延迟线程的实现方案

通用方案:通过进程注入创建新线程

如果目标进程(如clipit,PID 2569)没有内置的线程扩展接口,最直接的方式是用进程注入强制让它创建新线程:

  1. 编写一个简单的线程创建代码,编译为共享库
    新建inject_thread.c文件:
    #include <pthread.h>
    #include <unistd.h>
    
    void* keep_alive_thread(void* unused) {
        // 让线程持续休眠,避免退出
        while (1) sleep(300);
        return NULL;
    }
    
    // 共享库加载时自动执行的构造函数
    __attribute__((constructor)) void init() {
        pthread_t tid;
        pthread_create(&tid, NULL, keep_alive_thread, NULL);
        // 不需要join,让线程后台运行
    }
    
  2. 编译为共享库:
    gcc -shared -fPIC -o inject_thread.so inject_thread.c -lpthread
    
  3. 注入到目标进程
    使用ptrace工具或现成的注入脚本(如inject),以root权限执行:
    inject -n clipit inject_thread.so
    
    核心逻辑是让目标进程调用dlopen加载我们的共享库,共享库的构造函数会自动触发线程创建。
  4. 验证结果
    执行ps -Lp 2569查看线程列表,新增线程的创建时间会明显晚于原有线程。

更安全的方案:利用进程自身IPC接口(如果支持)

如果目标进程(如gigolo)本身支持IPC(比如DBus)扩展,可以通过官方接口触发线程创建:

  • 查询clipit的DBus接口:
    dbus-send --session --dest=org.clipit.Clipit --type=method_call --print-reply /org/clipit/Clipit org.freedesktop.DBus.Introspectable.Introspect
    
  • 如果存在创建辅助线程的方法,直接发送对应DBus指令即可,这种方式不会破坏进程原有逻辑,无需注入。

注意事项

  • 进程注入需要root权限,部分安全机制(如SELinux)会拦截操作,需提前临时关闭或配置规则
  • 注入的共享库要尽量轻量化,避免干扰目标进程的正常运行
  • 若目标进程为静态编译,无法使用dlopen注入,需直接注入机器码,实现难度更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:56:02