大概的介绍一下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运行相关推荐

  1. 关于linux下进程、线程和任务的一种阐述

    进程在OS中是一个非常关键的抽象概念.  在OS中虚拟CPU称为执行线程,简称为线程.  用于创建和管理多执行线程的实用工具通常包含在一个pthread库.因为该库中接口是按照POSIX标准定义的,所 ...

  2. linux进程同步问题,关于LINUX下进程和线程对文件的同步问题,请高手来看看!!!...

    不知道大家有没有碰到过这样的问题,即在LINUX下的程序有时候会碰到多个进程访问同一个文件, 以及一个进程的不同线程对一个文件的同步问题,我尝试用了系统提供的fcntl函数来给文件加锁, 但是这只是一 ...

  3. linux下查看进程的线程数,linux查看进程的线程数

    top -H -p $PID  #查看对应进程的那个线程占用CPU过高 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行 ...

  4. 内核和用户模式下进程与线程创建

    文章目录 内核模式下进程与线程的创建 进程创建 线程创建 用户模式下进程与线程的创建 内核模式下进程与线程的创建 进程创建 在内核模式中,一个进程的创建是从函数NtCreateProcess开始的.该 ...

  5. 关于linux的进程和线程

    关于linux的进程和线程 http://kenby.iteye.com/blog/1014039 Linux下的多线程编程 http://fanqiang.chinaunix.net/a4/b8/2 ...

  6. linux 让暂停的进程恢复,Linux 下进程的挂起和恢复命令

    本文给大家介绍进程的挂起及恢复命令,具体内容如下所示: #ctrl+z:挂起,程序放到后台,程序没有结束. #jobs:查看被挂起的程序工作号 恢复进程执行时,有两种选择:fg命令将挂起的作业放回到前 ...

  7. linux看不到进程管理,关于Linux下进程的详解【进程查看与管理】

    关于Linux下进程的详解[进程查看与管理] 一.关于进程 进程: 已经启动的可执行程序的运行实力 进程的组成:一个进程包含内核中的一部分地址空间和一系列数据结构.其中地址空间是内核标记的一部分内存以 ...

  8. linux的进程与线程通信方式,Linux的进程/线程间通信方式总结

    Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程 ...

  9. 理解Linux的进程,线程相关的各类ID:PID,LWP,TID,TGID

    最近实验室遇到了一个关于PID的问题,让我也跟着学习一下,查看了一下相关资料,找到一篇关于Linux进程和线程的各种ID的介绍,所以转载了过来. 作者:wipan 来源:cnblogs 地址:http ...

最新文章

  1. 【 HihoCoder】1082 The Marshtomp has seen it all before (暴力 或 脑力)
  2. securecrt连接mysql_使用SecureCRTP 连接生产环境的web服务器和数据库服务器
  3. CSS3(linear-gradient, transition, transform, border-radius)
  4. nginx 没有cookie_Nginx 内容缓存及常见参数配置
  5. IDEA 终于支持中文版和 JDK 直接下载了(太方便了)附新版介绍视频
  6. 第一:MySQL安装和配置(超详细)
  7. 如何将PDF转换成Word
  8. 关于debian网卡驱动
  9. Flex布局脑图总结
  10. 基于双边滤波的人脸美化
  11. 帧内预测-函数initAdiPattern
  12. Oracle时间以半小时为单位取整
  13. 信息收集--Nmap
  14. JQuery入门学习教程
  15. 计算机excel必备知识,Excel超级实用技巧12则 -电脑资料
  16. C语言笔试题(嵌入式软件开发)
  17. 逻辑门电路的延时分析
  18. day4_shop程序
  19. 浅谈IM软件如何建立安全socket连接、登录
  20. Java代码实现SMS短信发送功能

热门文章

  1. pcb钻孔披锋改善报告_高速高频PCB技术 || 玻纤效应对高速信号的影响
  2. 生信宝典联合科学出版社在双 11推出生物信息专题书单 5 折优惠!学起来!
  3. 综述之我的十年本硕博生活
  4. 参考文献中杂志名字问题
  5. 1.8编程基础之多维数组 03 计算矩阵边缘元素之和 python
  6. 1.3 编程基础之算术表达式与顺序执行 08 温度表达转化
  7. java锁的级别_Java锁的那些事儿之JDK锁(ReentrantLock)
  8. 基于java 企业进销存管理系统设计(含源文件)
  9. Vue笔记-Ant Design Vue的使用(Vue3)
  10. Qt笔记-进程只能存在1个(Linux适用,Windows有思路)