- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有没有办法使用 sysctl() 获取每个进程的 cpu 使用率?
我正在尝试寻找一种方法来检测特定应用程序的启动。好像没办法获取前台运行的应用信息。所以我想如果我可以监控该特定应用程序的 cpu 使用情况,我可以监控 cpu 使用情况的变化并大致假设应用程序何时启动。这可能吗?
我不打算将此应用发布到苹果应用商店。
这只是一项研究。因此,如果有任何方法可以做到这一点,我很高兴知道。
最佳答案
执行以下过程 1. 导入以下文件
#include <sys/sysctl.h>
#include <sys/types.h>
#include <mach/mach.h>
#include <mach/processor_info.h>
#include <mach/mach_host.h>
2。添加伊娃
processor_info_array_t cpuInfo, prevCpuInfo;
mach_msg_type_number_t numCpuInfo, numPrevCpuInfo;
unsigned numCPUs;
NSTimer *updateTimer;
NSLock *CPUUsageLock;
3.输入.m文件
-(void)voidDidLoad
{
int mib[2U] = { CTL_HW, HW_NCPU };
size_t sizeOfNumCPUs = sizeof(numCPUs);
int status = sysctl(mib, 2U, &numCPUs, &sizeOfNumCPUs, NULL, 0U);
if(status)
numCPUs = 1;
CPUUsageLock = [[NSLock alloc] init];
updateTimer = [[NSTimer scheduledTimerWithTimeInterval:3
target:self
selector:@selector(updateInfo:)
userInfo:nil
repeats:YES] retain];
}
- (void)updateInfo:(NSTimer *)timer
{
natural_t numCPUsU = 0U;
kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &numCPUsU, &cpuInfo, &numCpuInfo);
if(err == KERN_SUCCESS) {
[CPUUsageLock lock];
for(unsigned i = 0U; i < numCPUs; ++i) {
float inUse, total;
if(prevCpuInfo) {
inUse = (
(cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER])
+ (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM])
+ (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE])
);
total = inUse + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]);
} else {
inUse = cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];
total = inUse + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];
}
NSLog(@"Core: %u Usage: %f",i,inUse / total);
}
[CPUUsageLock unlock];
if(prevCpuInfo) {
size_t prevCpuInfoSize = sizeof(integer_t) * numPrevCpuInfo;
vm_deallocate(mach_task_self(), (vm_address_t)prevCpuInfo, prevCpuInfoSize);
}
prevCpuInfo = cpuInfo;
numPrevCpuInfo = numCpuInfo;
cpuInfo = NULL;
numCpuInfo = 0U;
} else {
NSLog(@"Error!");
[NSApp terminate:nil];
}
关于objective-c - 使用 sysctl() 的每个进程的 iOS cpu 使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12889422/
我正在尝试制作一个读取系统信息(在 MacOS 上)的应用程序,并且我已经能够像这样读取 sysctl STRINGS: func cpu() -> String { var size =
我查看了手册页和文档,但它们只讨论了命令行调用。我说的是 C 函数。关于它的两个问题: C 中 sysctl() 的参数是什么? (我只想要一个将军描述每个参数是什么以及它的用途) sysctl()
考虑这段代码: int procmon_state = 0; static struct ctl_table_header *procmon_table_header; static ctl_tabl
Scanario:我有一个容器镜像,需要使用net.core.somaxconn> default_value运行。我正在使用Kubernetes在GCE中部署和运行。 我的集群中的节点(vms)配置
我需要一种方法来检索 Mac 上所有用户的所有正在运行的进程(使用 Cocoa)。我找到了一个使用 sysctl 检索进程的实现,但我还需要运行用户。这是我获取进程列表的截图,但是有没有办法修改它以包
在我的应用程序中,我需要在 Android 中编辑 sysctl 设置。对于 example,我见过很少的应用程序可以做到这一点但我不知道他们如何以编程方式执行此操作,是否有任何想法如何执行此操作?
在 4.10.0-38-generic 版本中,ctl_table 结构中没有 ctl_name 字段我找到了教程 https://www.google.com/url?sa=t&rct=j&q=&e
我有以下代码 import sys from ctypes import * from ctypes.util import find_library libc = cdll.LoadLibrary(
我的实际限制是 1024: $ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d
我在 docker-compose 文件中有一个 sysctls 设置,但据我了解,此指令在版本 3 中被忽略: sysctls: - net.core.somaxconn = 655
我正在尝试在 Kubernetes Kind 集群中部署一个容器。我尝试部署的容器需要设置几个 sysctls 标志。 部署失败 forbidden sysctl: "kernel.msgmnb" n
我正在尝试从内核模块访问 tcp_input.c 中定义的 tcp_pacing_ss_ratio。可以在用户空间使用 sysctl 命令修改该变量。但是,它不会导出,也不能直接从模块中引用。 从内核
为什么我们要在Linux中配置hugepage值? 我们什么时候配置hugepage值以及如何计算hugepage值? 最佳答案 当需要在 RAM 中连续(按顺序)分配大内存页时,通常会配置大页值。
要在内核模式和用户空间进行通信,我使用 this C program .我正在使用以下 Makefile 创建要加载的 .ko 文件。 bj-m := sysctl_test.o KDIR
我正在运行 x86_64 RedHat 5.3(内核 2.6.18)并在尝试设置 UDP 缓冲区的上下文中专门查看来自 sysctl -a 的 net.core.rmem_max。接收器应用程序有时会
我有一个剧本,其中有几个任务将值设置为 sysctl。我如何使用 sysctl 模块通过一个任务设置所有值,而不是为每个设置设置一个任务? 剧本片段: - name: Set tcp_keepaliv
14 "Mojave"在我的 macbook 上,我正在尝试增加 fs.inotify.max_user_watches值在 /etc/sysctl.conf (解决另一个问题)。为了结束这个仪式,我
Nginx 充当广告服务器的反向代理,每分钟接收 2 万个请求。响应发生在从广告服务器到 nginx 的 100 毫秒内 在配置为的虚拟机上运行 128GB 内存 4 个虚拟 CPU 100GB 硬盘
我需要更新 /etc/sysctl.conf,但如果更改,我需要运行 systemctl -p --system。 如何在我的剧本中实现这一目标? 最佳答案 您可以通过使用处理程序或注册任务并有条件地
我正在尝试制作我的第一个 dockerfile(我是新手),我需要系统运行命令 sysctl -w kernel.randomize_va_space=0 (它是一个实验室环境。),但我收到错误: s
我是一名优秀的程序员,十分优秀!