我爱编程
文章平均质量分 88
温暖的电波
这个作者很懒,什么都没留下…
展开
-
利用systemd的定时器来定时停止服务
需求背景:有时候我们有这样的一种需求:需要一些服务在定时运行一段时间后就停止。实现这种需求的方法有许多种,这里介绍一种基于systemd实现方式。场景:希望在dockerd服务在每次启动1个小时后就关闭服务。实现:利用systemd中的timer来实现。具体方法:1 创建定时器处理服务 在/usr/lib/systemd/system/目录下创建dockert...原创 2020-02-23 21:50:52 · 1101 阅读 · 0 评论 -
交叉构建sqlite与libseccomp
背景 在交叉构建第三方的一些组件时需要依赖sqlite以及libseccomp,此时就需要先交叉构建sqlite和libseccomp。下面简单说明如何交叉构建sqlite和libseccomp。获取源码 可以根据自己需要分别从https://www.sqlite.org/download.html和https://github.com/seccomp/libseccom...原创 2019-07-20 10:15:08 · 496 阅读 · 0 评论 -
制作一个最简单ftpd容器镜像
准备基本的根文件系统镜像 先从dockerhub pull busybox镜像到本地。Pull完成后可以通过docker images看到busybox:latest镜像。准备entrypiont文件 然后编写entrypiont.sh作为ftpd镜像的入口函数。如下:#!/bin/shsh -c "exec tcpsvd 0 21 ftpd -w /"编写...原创 2019-08-07 21:59:57 · 276 阅读 · 0 评论 -
制作简单的http镜像
一、编写简单的http服务首先写一个简单的http服务器程序:package mainimport ( "fmt" "net/http")type MyHandler struct{}//实现接口的ServeHTTP方法func (this *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques...原创 2019-08-07 21:59:19 · 694 阅读 · 0 评论 -
进程托孤
前言 我们知道,一个任务在消亡退出时通常会将子任务(后面用孤儿或者children表示)托付其他任务(后面用reaper表示)以便以后“收尸”,这个流程就是“托孤”。 托孤会为子任务寻找一个新的parent作为new reaper,那这个new reaper选谁呢?怎么选呢?会是传说中的1号进程么?这就是本文要去探索的问题。一、单身父亲的谢幕 作为一个单身父亲,没有...原创 2019-09-25 19:43:28 · 1161 阅读 · 5 评论 -
使用htimer定时计算一个任务的cpu利用率
有时候我们想关注某一个任务的cpu利用率,除了使用top还有什么其他方法可行呢? 实际上cpu利用率的原理就是特定时间内一个任务总的运行时间与时间的比值即可简单的认为是cpu利用率。 那么就有两个问题:1)就是任务在某个时间周期的运行时间;2) 周期性的计算cpu利用率。 第一个问题任务在某个时钟周期的运行时间可以通过当前时间任务总的运行时间p->se.sum_exec...原创 2018-12-24 00:47:59 · 1244 阅读 · 1 评论 -
收集系统中指定任务的所有线程
收集系统中特定进程的所有子线程原创 2017-03-16 22:31:46 · 310 阅读 · 0 评论 -
linu中使用prctl函数为线程指定名字
一、前言 有时候我们通过fork()、pthread_create()创建出来的新任务其名字和创建任务的parent是一样的,如果有需要,该如何修改这些新创建任务的名字呢? 有办法,用proctl()函数来实现。这个函数可用来对任务进行控制,其具体情况如下所示:#include int prctl(int option, unsigned long arg2, un原创 2017-03-27 19:44:37 · 11390 阅读 · 0 评论 -
sched_setscheduler()函数
sched_setscheduler()函数用以修改线程的调度策略以及调度参数。一 函数原型 #include <sched.h>int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);二 参数说明 pid:表示要修改/设置调度参数的目标线程,如果传入的参数pid为0则目标线程是调...原创 2018-02-10 15:04:00 · 9778 阅读 · 1 评论 -
使用cgroup的sched_load_balance
Sched_load_balance是cgroup中cpuset子系统提供的负载均衡功能。它用于控制当前cgroup以及下层的cgroup中任务的负载均衡性。要控制一个组的负载均衡,必须先将所有与本组共享cpu的其他组的负载均衡先关闭。 举例:12个核的系统,cpu0~cpu11,可以通过如下例子来了解sched_load_balance:1 创建cpuset控制组mkdir /cpuset...原创 2018-02-10 14:13:16 · 1131 阅读 · 0 评论 -
Docker容器使用/dev/mem与HOST端映射同一段物理内存
我们知道docker容器与HOST端有一定的隔离性,但同时也共享着一些资源,比如内存资源。今天我们就看一下Docker容器通过/dev/mem设备节点与HOST共享一段物理内存。 要达到这个目的需进行如下操作:1) 划分一段用于映射到/dev/mem设备文件的保留物理内存;2) 准备一段在容器和HOST端可运行的映射和读写物理内存的代码;3) 启动一个带有--privileged参数...原创 2018-03-02 20:48:32 · 3192 阅读 · 0 评论 -
脚本监控一个任务的调度情况
有时候我们需要查看一个任务的调度情况可以通过 cat /proc/$pid/status | grep switch来判断任务有没有切换。但是任务出问题,得不到调度的时机是不确定的。 如果我们希望在任务没有及时得到调度的时候及时的做出报告,以便我们能够及时处理,下面这个脚本值得一试:#!/bin/shif [ $argc != 1 ]; then echo "US...原创 2018-09-04 21:24:03 · 489 阅读 · 0 评论 -
一个消耗内存(以Mb为单位)的小程序
有时候需要消耗指定大小的内存来验证一些问题,这个时候一些小程序就可以帮上忙了,下面这个小程序malloc_mb.c就是这样的作用:#include <stdlib.h>#include <stdio.h>#include <unistd.h>#define UNIT (1024*1024)int main(int argc, cha...原创 2018-08-23 22:33:00 · 2083 阅读 · 0 评论 -
通过任务名字打印任务的亲和性
有时候我们调试系统时,需要在运行过程中查看某个任务的状态,如一些任务的cpu亲和性。但是我们我们只知道要监控的任务的名字,任务的pid是动态分配的。 下面这个程序就是在c中通过popen()执行一段shell程序以通过任务名字找到对应的PID,然后再根据PID查看任务的cpu亲和性:#include <string.h> #include <sys...原创 2018-09-04 21:19:57 · 447 阅读 · 0 评论 -
仿照taskset的任务亲和性设置小程序
#define _GNU_SOURCE#include <sched.h>#include <unistd.h> /* sysconf */#include <stdlib.h> /* exit */#include <stdio.h>int main(int argc, char *argv[]){ int i, nrcpu...原创 2020-01-21 20:43:33 · 217 阅读 · 0 评论