linux 下进程和线程指定CPU运行
大概的介绍一下linux 的指定CPU运行,包括进程和线程,这个只是最基本的方法,看一下基本就会了,至于其他的进程间通信和线程同步的话,这里暂不做任何介绍。
算了,还是比较整体的介绍一下如何去学习这个吧。
linux下的top命令是可以查看当前的cpu的运行状态,具体参数自己去查,这里只介绍与标题相关的,按1可以查看系统有多少个CPU,以及每个CPU的运行状态。可是如何查看线程的CPU呢???top -Hp pid,pid就是你当前程序的进程号,如果是多线程的话,是可以查看进程内所有线程的CPU和内存使用情况。
pstree可以查看主次线程,同样的pstree -p pid。可以查看进程的线程情况。
taskset这个其实才是重点,可以查看以及设置当前进程或线程运行的CPU(设置亲和力)。
taskset -pc pid,查看当前进程的cpu,当然有的时候不只是一个,taskset -pc cpu_num pid ,cpu_num就是设置的cpu。
这样的话基本的命令和操作其实大家都知道了,接下来就是在代码中完成这些操作,并通过命令去验证代码的成功率。
进程制定CPU运行:
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/sysinfo.h>
#include<unistd.h>
#define __USE_GNU
#include<sched.h>
#include<ctype.h>
#include<string.h>int main(int argc, char* argv[])
{//sysconf获取有几个CPUint num = sysconf(_SC_NPROCESSORS_CONF);int created_thread = 0;int myid;int i;int j = 0;//原理其实很简单,就是通过cpu_set_t进行位与操作cpu_set_t mask;cpu_set_t get;if (argc != 2){printf("usage : ./cpu num\n");exit(1);}myid = atoi(argv[1]);printf("system has %i processor(s). \n", num);//先进行清空,然后设置掩码CPU_ZERO(&mask);CPU_SET(myid, &mask);//设置进程的亲和力if (sched_setaffinity(0, sizeof(mask), &mask) == -1){printf("warning: could not set CPU affinity, continuing...\n");}while (1){CPU_ZERO(&get);//获取当前进程的亲和力if (sched_getaffinity(0, sizeof(get), &get) == -1){printf("warning: cound not get cpu affinity, continuing...\n");}for (i = 0; i < num; i++){if (CPU_ISSET(i, &get)){printf("this process %d is running processor : %d\n",getpid(), i);}}}return 0;
}
进程设置CPU运行,其实只能是单线程。多线程设定CPU如下:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <sched.h>void *myfun(void *arg)
{cpu_set_t mask;cpu_set_t get;char buf[256];int i;int j;//同样的先去获取CPU的个数int num = sysconf(_SC_NPROCESSORS_CONF);printf("system has %d processor(s)\n", num);for (i = 0; i < num; i++) {CPU_ZERO(&mask);CPU_SET(i, &mask);//这个其实和设置进程的亲和力基本是一样的if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0) {fprintf(stderr, "set thread affinity failed\n");}CPU_ZERO(&get);if (pthread_getaffinity_np(pthread_self(), sizeof(get), &get) < 0) {fprintf(stderr, "get thread affinity failed\n");}for (j = 0; j < num; j++) {if (CPU_ISSET(j, &get)) {printf("thread %d is running in processor %d\n", (int)pthread_self(), j);}}j = 0;while (j++ < 100000000) {memset(buf, 0, sizeof(buf));}}pthread_exit(NULL);
}int main(int argc, char *argv[])
{pthread_t tid;if (pthread_create(&tid, NULL, (void *)myfun, NULL) != 0){fprintf(stderr, "thread create failed\n");return -1;}pthread_join(tid, NULL);return 0;
}
2015年12月27日23:04:37
linux 下进程和线程指定CPU运行相关推荐
- 关于linux下进程、线程和任务的一种阐述
进程在OS中是一个非常关键的抽象概念. 在OS中虚拟CPU称为执行线程,简称为线程. 用于创建和管理多执行线程的实用工具通常包含在一个pthread库.因为该库中接口是按照POSIX标准定义的,所 ...
- linux进程同步问题,关于LINUX下进程和线程对文件的同步问题,请高手来看看!!!...
不知道大家有没有碰到过这样的问题,即在LINUX下的程序有时候会碰到多个进程访问同一个文件, 以及一个进程的不同线程对一个文件的同步问题,我尝试用了系统提供的fcntl函数来给文件加锁, 但是这只是一 ...
- linux下查看进程的线程数,linux查看进程的线程数
top -H -p $PID #查看对应进程的那个线程占用CPU过高 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行 ...
- 内核和用户模式下进程与线程创建
文章目录 内核模式下进程与线程的创建 进程创建 线程创建 用户模式下进程与线程的创建 内核模式下进程与线程的创建 进程创建 在内核模式中,一个进程的创建是从函数NtCreateProcess开始的.该 ...
- 关于linux的进程和线程
关于linux的进程和线程 http://kenby.iteye.com/blog/1014039 Linux下的多线程编程 http://fanqiang.chinaunix.net/a4/b8/2 ...
- linux 让暂停的进程恢复,Linux 下进程的挂起和恢复命令
本文给大家介绍进程的挂起及恢复命令,具体内容如下所示: #ctrl+z:挂起,程序放到后台,程序没有结束. #jobs:查看被挂起的程序工作号 恢复进程执行时,有两种选择:fg命令将挂起的作业放回到前 ...
- linux看不到进程管理,关于Linux下进程的详解【进程查看与管理】
关于Linux下进程的详解[进程查看与管理] 一.关于进程 进程: 已经启动的可执行程序的运行实力 进程的组成:一个进程包含内核中的一部分地址空间和一系列数据结构.其中地址空间是内核标记的一部分内存以 ...
- linux的进程与线程通信方式,Linux的进程/线程间通信方式总结
Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程 ...
- 理解Linux的进程,线程相关的各类ID:PID,LWP,TID,TGID
最近实验室遇到了一个关于PID的问题,让我也跟着学习一下,查看了一下相关资料,找到一篇关于Linux进程和线程的各种ID的介绍,所以转载了过来. 作者:wipan 来源:cnblogs 地址:http ...
最新文章
- 【 HihoCoder】1082 The Marshtomp has seen it all before (暴力 或 脑力)
- securecrt连接mysql_使用SecureCRTP 连接生产环境的web服务器和数据库服务器
- CSS3(linear-gradient, transition, transform, border-radius)
- nginx 没有cookie_Nginx 内容缓存及常见参数配置
- IDEA 终于支持中文版和 JDK 直接下载了(太方便了)附新版介绍视频
- 第一:MySQL安装和配置(超详细)
- 如何将PDF转换成Word
- 关于debian网卡驱动
- Flex布局脑图总结
- 基于双边滤波的人脸美化
- 帧内预测-函数initAdiPattern
- Oracle时间以半小时为单位取整
- 信息收集--Nmap
- JQuery入门学习教程
- 计算机excel必备知识,Excel超级实用技巧12则 -电脑资料
- C语言笔试题(嵌入式软件开发)
- 逻辑门电路的延时分析
- day4_shop程序
- 浅谈IM软件如何建立安全socket连接、登录
- Java代码实现SMS短信发送功能
热门文章
- pcb钻孔披锋改善报告_高速高频PCB技术 || 玻纤效应对高速信号的影响
- 生信宝典联合科学出版社在双 11推出生物信息专题书单 5 折优惠!学起来!
- 综述之我的十年本硕博生活
- 参考文献中杂志名字问题
- 1.8编程基础之多维数组 03 计算矩阵边缘元素之和 python
- 1.3 编程基础之算术表达式与顺序执行 08 温度表达转化
- java锁的级别_Java锁的那些事儿之JDK锁(ReentrantLock)
- 基于java 企业进销存管理系统设计(含源文件)
- Vue笔记-Ant Design Vue的使用(Vue3)
- Qt笔记-进程只能存在1个(Linux适用,Windows有思路)