线程问题——同样的程序,在ubuntu中运行和嵌入式中PID表现不同的原因

Ubuntu 12.10 CPU限流实战:cpulimit精准节制失控进程 CPU使用率限制是Linux系统资源治理的基础能力,其核心在于区分‘调度优先级调整’与‘硬性资源配额’——前者如nice仅影响内核CFS调度权重,无法约束实际占用;后者需在用户态或cgroups层实施时间片干预。在Ubuntu 12.10这一采用3.5内核、默认无cgroups挂载且依赖Upstart的旧发行版中,cpulimit凭借ptrace机制实现免内核修改、低侵入的进程级CPU硬限,成为应对Unity桌面高负载、Java/Python应用线程失控等典型场景的工程优选方案。本文聚焦该版本特有的兼容性边 阅读详情
 

1. 同一多线程程序,经过编译和交叉编译后,在ubuntu和在我们的ARM板的嵌入式LINUX中运行时候,通过ps 看到的信息不一致:
   比如:同样的attr_thread这个程序:
   ubuntu中运行后,通过ps -aux只能看到一个进程在运行
   目标板中运行后,通过ps 能看到4个进程在运行,但运行的程序名字是一致的

原因:
   ubuntu中使用NPTL线程库,目标板中使用linuxthreads线程库
  
   NPTL从一个进程中所有的线程中运行getpid()获取到得PID值相同
   而linuxthreads每个线程使用不同的PID,从一个进程中不同线程中运行getpid()获取到得PID值不相同

2. 确认系统中线程库是那一种的方法:

   查看方法可以通过运行/lib/libc.so.6 可看到:
 
ubuntu中如下:
  shyi@ubuntu:~/labs/1106/labs/threads$ /lib/libc.so.6
GNU C Library (Ubuntu EGLIBC 2.12.1-0ubuntu6) stable release version 2.12.1, by Roland McGrath et al.
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.5 20100909 (prerelease).
Compiled on a Linux 2.6.35 system on 2010-09-10.
Available extensions:
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        Native POSIX Threads Library by Ulrich Drepper et al  (这一行是重点,表示这是NPTL)
        BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.


目标板上:
# /lib/libc.so.6
GNU C Library stable release version 2.3.6, by Roland McGrath et al.
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 3.4.5.
Compiled on a Linux 2.6.12 system on 2008-09-10.
Available extensions:

        GNU libio by Per Bothner
        crypt add-on version 2.1 by Michael Glad and others
        linuxthreads-0.10 by Xavier Leroy  (这一行是重点,表示这是linuxthreads)                   
        BIND-8.2.3-T5B
        libthread_db work sponsored by Alpha Processor Inc
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.  

Ubuntu 12.04手动编译mod_wsgi解决ABI不兼容问题 mod_wsgi是Apache与Python应用通信的核心WSGI模块,其本质是依赖Apache运行时ABI和Python解释器二进制接口的动态链接库。当系统中Apache或Python经过安全补丁更新后,头文件、符号表与共享库版本出现微小偏差,就会触发‘undefined symbol’等ABI不匹配错误——这在Ubuntu 12.04 LTS等长期维护版本中尤为典型。技术价值在于确保模块与运行环境‘同源编译’:通过apxs2生成精准编译参数,绑定真实python2.7路径及打补丁后的apache2/pr 阅读详情

相关推荐

基于OpenCV与PID的视觉平衡球控制系统实战指南

闭环控制系统是自动化与机器人领域的核心概念,它通过传感器反馈实时调整执行器输出,以实现对目标状态的精确控制。其基本原理在于将期望值与实际测量值进行比较,生成误差信号,并经由控制器(如PID算法)计算出修正量。这种技术对于实现稳定、精准的运动控制具有关键价值,广泛应用于机器人平衡、无人机定高、工业过程控制等场景。计算机视觉作为一种强大的非接触式传感器,为闭环控制提供了丰富的环境信息。本文聚焦于一个经典的教学与实验项目——视觉测距-PID平衡球,该项目巧妙地将OpenCV图像处理与PID控制算法相结合,通过摄像

weixin_34166472的博客 430

ROS 2 Ubuntu二进制包安装:稳定、轻量、嵌入式就绪的部署方案

ROS 2 是机器人操作系统的核心中间件框架,其安装方式直接影响开发效率与系统稳定性。Ubuntu二进制包(binary)安装作为一种官方L3推荐路径,采用静态链接与预编译机制,规避了apt依赖冲突和源码编译的环境敏感性问题,显著提升ARM64设备(如Jetson Orin、Raspberry Pi)上的部署可靠性与启动速度。该方案通过冻结CI验证版本、精简RMW中间件、隔离系统路径,实现开箱即用的工程化交付能力,特别适用于CI/CD流水线、内网离线环境、教学实验及资源受限嵌入式平台。本文深入解析其原理、实

weixin_30654583的博客 402

Ubuntu 12.04 VPS 上源码编译部署 RethinkDB 实战指南

实时数据库指能自动推送数据变更至客户端的存储系统,其核心原理依赖底层 changefeed 机制与低延迟网络协议栈。技术价值在于消除轮询开销、保障端到端亚秒级响应,广泛应用于协同编辑、IoT 状态同步、聊天消息广播等场景。然而在老旧生产环境(如 EOL 系统、定制硬件、受限内核)中,标准安装路径常因源失效、ABI 不兼容、服务管理缺陷而失败。本文聚焦 RethinkDB 与 Ubuntu 12.04 这一典型受限组合,详解如何绕过 apt 源下线、修复 libv8/libboost 版本冲突、重写 Upst

weixin_33796177的博客 401

libc

$ ldd a.out     linux-vdso.so.1 =&gt;  (0x00007fd7ea05b000)     libc.so.6 =&gt; /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd7e9c66000)     /lib64/ld-linux-x86-64.so.2 (0x00005604828b7000) $ $ /lib/{x86...

happykillerxxx的专栏 369

Ubuntu下创芯科技CAN分析仪驱动安装与调试全攻略(附常见问题解决)

本文详细介绍了在Ubuntu系统下安装与调试创芯科技CAN分析仪驱动的完整流程。内容涵盖从环境准备、驱动编译、内核模块加载,到用户态库配置、设备权限设置以及实战调试技巧。针对驱动安装失败、设备无法识别、编译链接错误等常见问题,提供了深度排查指南和解决方案,帮助嵌入式开发者在Linux环境下高效搭建CAN总线测试环境。

hp777的博客 371

OpenLiteSpeed在Ubuntu 18.04的深度适配与Brotli支持实践

Web服务器是现代应用交付的核心组件,其静态资源处理能力、压缩支持与系统兼容性直接决定性能与稳定性。Brotli压缩(.br)作为比Gzip更高效的文本压缩标准,已成为前端优化刚需,但Nginx和Apache在老旧LTS系统如Ubuntu 18.04上普遍缺乏原生支持——或需手动编译模块,或因动态链接依赖(如OpenSSL 1.0.x、libpcre)导致运行时崩溃。OpenLiteSpeed凭借静态链接二进制、事件驱动协程模型及内置Brotli一级支持,天然规避了这类系统级兼容瓶颈;它不仅解决413错误、

weixin_34109408的博客 374

gcc链接介绍

一点睛 在成功汇编之后,就进入了链接阶段。链接主要是为了解决多个文件之间符号引用的问题。编译时编译器只对单个文件进行处理,如果该文件里面需要引用到其他文件中符号(例如全局变量或者某个函数库中的函数),那么这时在这个文件中该符号的地址是没法确定的,只能等链接器把所有的目标文件连接到一起才能确定最终的地址,最终生成可执行文件。 当所有目标文件都生成之后,gcc就在内部调用链接器ld完成链接工作。...

实践求真知 2447

【Python&RS】Rasterio库安装+基础函数使用教程

Rasterio是一个Python库,专门用于栅格数据的读写操作。它支持多种栅格数据格式,如GeoTIFF、ENVI和HDF5,为处理和分析栅格数据提供了强大的工具。RasterIO适用于各种栅格数据应用,如卫星遥感、地图制作等。这篇文章跟大家介绍一下Rasterio库的安装以及一些基本函数的使用教程,附带源码。

Remote Sensing迷途小书童 1万+

进程与线程

进程与线程详细介绍

m0_62360856的博客 518

关于mos管的压降问题(项目遇到问题总结)

在研发过程中没有出现问题的板子,到了小批时竟出现雷达一直在触发???找了大几天,没有头绪。心中疑惑颇多,加上老板催促,自考等原因,真是压力山大。4月份自考,只有差不多一个月时间了吧,没有什么大的收获,反而在查找硬件问题的过程中,发现了一个自己忽视的一个问题,就是关于Mos管的压降问题。 备考的过程崎岖不平,工作又问题多多,孰轻孰重,如何取舍?从心理来说,不想取舍什么,只是有所得就可以,过不了就过不了呗,已经毕业十五年了,没这个本科文凭不也过来了吗?只是代表了自己在这一段时间的思考,自己兴趣吧,没什么大不了

guangod的博客 2万+

[pcie]gen6 下 L0p

000b~100b: 触发L0p 操作流程协商工作link width 到target link width.为111b:link width 硬件动态调整。硬件动态:Device control 3 register.target link width=111b当pcie链路检测到空闲状态时,设备可以主动进入L0p状态。L0p 是pcie gen6 新引入的链路状态,是L0的子状态。(5)LINK WIDTH:当LINK WIDTH CHANGE.cmd为Request时表示请求的链路宽度。

BIG_APPLE1的博客 1678

第33章 线程:更多细节

不要将线程与信号混合使用,只要可能多线程应用程序的设计应该避免使用信号。如果多线程应用必须处理异步信号的话,通常zuijianjie-的方法是所有的线程都阻塞信号,创建一个专门的线程调用sigwait()函数(或者类似的函数)来接收收到的信号。这个线程就可以安全地执行像修改共享内存(处于互斥量的保护之下)和调用非异步信号安全的函数。

u010783439的博客 187

转换shp坐标系之前,设置转换的投影

1.点击目录》工具箱》系统工具箱》Data Management Tools.tbx》投影和变换》创建自定义地理(坐标)变换 2.名称自定义 2.输入地理坐标系可以根据所需要转换的shp文件属性中查询出来 把图层拖入arcgis中,右键属性即可查看 3.复制坐标系,点击“输入地理坐标系”右侧的按钮后,粘贴在顶部搜索框中,并按enter键,选择对应的坐标系 4.点击“输出地理坐标系”右侧的按钮后,选择转换后的坐标系,如4326,选择后点击确认按钮。 5.自定义方法中选择

Wangwangwang___的博客 1864

linxu 线程kill不掉,线程PID一直在变

问题描述 centos7.9系统,运行了一个jar包,想把它停掉,但是怎么kill都杀不死 查看服务名:ps -ef | grep oys-core-4.0-SNAPSHOT.jar 查看得知进程PID = 12906 kill -9 12906 杀死进程,发现线程不存在 再次查看服务名:ps -ef | grep oys-core-4.0-SNAPSHOT.jar ,发现线程PID变了 解释: 那是因为oys-core-4.0-SNAPSHOT.jar 根本就没有启动进程,看到的进程是grep指令的

qq_44086060的博客 33万+

【ROS2】机械臂MoveIt2

navigation2 专注于移动机器人的导航与定位,处理大范围空间的底盘运动;MoveIt2 专注于机械臂的操作规划,处理多关节协同的末端执行器运动。在复合机器人(如,移动机械臂)navigation2 负责移动到目标区域,MoveIt2 负责机械臂抓取。官网:https://moveit.picknik.ai/main/index.html。

郭老二 600

STM32 cubeMX配置串口重定向

这篇文章主要讲解什么是串口重定向,为什么要串口串口重定向。使用printf函数和上位机通信是非常的方便的。希望大家都能够掌握。

m0_49476241的博客 4573

上机030线程

线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 线程的创建与终止 在Ubuntu中,pthread库默认不存在,须进行安装 sudo apt install -y glibc-doc manpages-posix-dev 安装完成后可查看pthread使用手册man pthreads 使用vim pthread_create.c来编辑代码创建或终止..

m0_65505359的博客 143

RK3588 部署 YOLO26 目标检测:PT → ONNX → RKNN 全流程

YOLO26n 在 RK3588 上 INT8 量化后 NPU 推理约 15ms,系统 FPS 约 55,可以覆盖边缘端实时检测需求。模型从 PT 到 RKNN 的转换要用opset=11避免算子兼容问题。先用 YOLO26n + 640 输入跑通全链路,确认推理结果正确后再做性能调优。

m0_64661770的博客 306

Linux多线程、进程和开发板

多线程 1、线程 同一进程中,执行的每个任务都被视为一个线程。一个进程中可以包含多个线程,所有线程共享进程拥有的资源。当然,每个线程也可以拥有自己的私有资源。 2、源代码 3、编译并执行 gcc 1.pthread_create_exit.c -pthread ./a.out 若模仿1的代码则无法运行,通过执行"man tan"可知,需要改为"-lm"。 gcc -pthread 2.pthread_join.c -lm ./2.out gcc -pthrea.

qq_59511833的博客 170

第67步 时间序列建模实战:ARIMA建模(Stata)

第67步 时间序列建模实战:ARIMA建模(Stata)

Jet4505的博客 6822

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

从零构建边缘AI追踪相机:硬件选型、算法部署与PID控制实战

边缘计算通过在数据源头就近处理信息,有效解决了云端AI方案的高延迟、隐私与网络依赖问题。其核心原理是将AI模型部署在终端设备上,实现本地实时推理与决策。这一技术价值在于为安防监控、智能看护、内容创作等场景提供了低功耗、高响应、高隐私保护的智能化基础。在工程实践中,硬件选型(如Jetson Nano、RK3588)、轻量级模型部署(如YOLOv8)与实时控制算法(如PID)是关键。本文聚焦于将这些技术融合,详细拆解如何构建一个集成了**AI算力**、能完成“感知-决策-控制”闭环的独立**边缘AI追踪相机**

ciya3282的博客 298

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C语言新手必看:在Ubuntu上编译程序遇到‘sleep’函数报错?教你一招搞定

本文详细解析了C语言新手在Ubuntu上编译程序时遇到的'sleep'函数隐式声明警告问题,指出其根源在于缺少<unistd.h>头文件。通过添加正确头文件、使用man手册查询函数信息以及跨平台兼容性处理等方法,帮助开发者彻底解决这一常见编译错误,同时深入讲解了C语言头文件机制和编译过程。

weixin_30652897的博客 404

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

嵌入式软件研发资源收藏(持续更新)

嵌入式软件研发资源汇聚:产品规格介绍:污染源在线自动检测(监测)数据采集传输仪https://wenku.baidu.com/view/1f3f97d176a20029bd642dc4.html 固件程序远程更新升级:程序版本号大小比较算法http://www.jianshu.com/p/071c55963738 linux下eclipse CDT安装和配置http://blog.sina.com...

雨日微风 830

Ubuntu Server下OpenClaw生产级部署:Node.js v24与systemd服务化实战

Linux系统中,Node.js运行时环境的稳定性直接决定AI Agent平台的可用性。其核心在于构建一条从操作系统init系统(如systemd)到JavaScript运行时(Node.js)再到应用层(OpenClaw)的可信执行链。Ubuntu Server作为主流部署基座,天然支持systemd初始化模型,可实现进程守护、资源隔离与崩溃自愈;而Node.js v24.x凭借V8 12.5引擎升级,在WebAssembly多线程支持与内存管理策略上显著优于v22.x LTS,成为OpenClaw官方推

394

【无标题】

线程的创建与中止 线程的连接与分离 线程互斥量/互斥锁 线程条件变量 进程获取测试环境变量代码 创建进程程序代码 运行线程的创建与中止注意:由于线程的竞争每次输出结果的次序都不一样线程的连接与分离 #include<pthread.h>intpthread_join(pthread_tthread,void**retval); 新创建的线程和进程一样,也需要被连接以监听其退出状态,否则也会变成僵尸线程。背后原因与进程一样,其退出之后,内核会...

shiliuyetongge的博客 218

i.MX6ULL嵌入式Linux TCP服务器实战:多进程/多线程并发编程详解

Socket编程是网络通信的基础,它通过文件描述符抽象了应用层与TCP/IP协议栈的交互接口。其核心原理在于建立连接、数据传输和连接释放的三次握手与四次挥手过程,确保了可靠的数据流传输。这项技术的价值在于为分布式系统和设备互联提供了标准、高效的通信机制,广泛应用于物联网网关、工业控制和服务器后台等领域。在嵌入式Linux开发中,如何实现稳定、高效的多客户端并发处理是核心挑战。本文以i.MX6ULL平台为例,深入剖析多进程和多线程两种经典并发模型,通过构建一个完整的TCP回显服务器,详解从环境搭建、代码实现到

weixin_34056162的博客 319
上一篇: 信号量的通信
下一篇: 线程——子线程、无参数
hare_Lee
博客等级 码龄15年 171粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值