Linux中查看进程占用内存的情况

Linux中查看某个进程占用内存的情况,执行如下命令即可,将其中的[pid]替换成相应进程的PID号:

cat /proc/[pid]/status

说明

/proc/[pid]/status中所保存的信息除了内存信息,还包括进程IDs、信号等信息,此处暂时只介绍内存相关的信息。

字段 说明
VmPeak 进程所使用的虚拟内存的峰值
VmSize 进程当前使用的虚拟内存的大小
VmLck 已经锁住的物理内存的大小(锁住的物理内存不能交换到硬盘)
VmHWM 进程所使用的物理内存的峰值
VmRSS 进程当前使用的物理内存的大小
VmData 进程占用的数据段大小
VmStk 进程占用的栈大小
VmExe 进程占用的代码段大小(不包括库)
VmLib 进程所加载的动态库所占用的内存大小(可能与其它进程共享)
VmPTE 进程占用的页表大小(交换表项数量)
VmSwap 进程所使用的交换区的大小

举例

显示进程cron的内存信息,通过 ...


限制用户登陆Linux的时间

只允许某用户8:00-12:00登陆,用简单粗暴的方式实现。

设置个定时任务(执行crontab -e编辑任务列表):

0 8 * * * passwd -u username
0 12 * * * passwd -l username

其中username替换成想限制的用户名;命令passwd -u是锁定用户,passwd -l解锁。

附:设置cron定时任务列表的格式:分 时 日 月 星期 命令,如果时间字段是*则表示所有,还可以加上/n表示每隔n个单位时间执行一次;最后跟需要执行的命令。


基于libpcap的开发实例

libpcap是Unix/Linux平台中用于网络数据包捕获的函数库(Windows版本为winpcap)。本文通过实例来说明其使用方法。

1 安装libpcap库

TCPDUMP官网下载最新的libpcap源代码,解压到本地后,编译并安装即可,注意安装时需要使用root权限。

./configure
make
make install

2 实例代码

代码完成的功能是抓取指定网卡的数据包,并将数据交给回调函数处理(这里回调函数只是打了个桩,没有做实质性的处理)。

首先定义一个基本类型的头文件(basetype.h),将数据类型封装一下:

#ifndef _BASETYPE_H_
#define _BASETYPE_H_

#define OK (0)
#define ERROR (1)

#define YES (1)
#define NO (0)

typedef void VOID;

typedef char CHAR;
typedef char ...

在多个文件中批量查找/替换字符串

在目录中查找包含指定字符串的文件(如下所示,在path目录中查找包含string字符串的文件)

grep string -rl /path

在目录中查找并替换指定的字符串(如下所示,将path目录中将所有文件中的oldstring字符串替换成newstring)

sed -i "s/oldstring/newstring/g" `grep oldstring -rl /path`

轻量级的 Linux 终端软件 RXVT

最近发现了个轻量级的Linux终端 —— RXVT,功能比xterm丰富,又不像其它终端(比如GNOME Terminal)那么臃肿。RXVT主要依靠配置文件来设置各项参数,下面是我的配置文件内容。

!!$HOME/.Xdefaults
Rxvt.preeditType: root

!!窗口大小及标题
Rxvt.geometry: 80x25
Rxvt.title: hutaow-rxvt

!!输入法设置
Rxvt.inputMethod: fcitx

!!透明度设置
!Rxvt.transparent: true
!Rxvt.shading: 110
!Rxvt.tintColor: grey
!Rxvt.inheritPixmap: false

!!扩展设置
Rxvt.perl-ext-common: default, matcher, fullscreen

!!URL操作
Rxvt.urlLauncher: /usr/bin/chromium ...

配置 VIM 开发环境

1 插件列表

1.1 CTags

CTags用来给源代码生成索引文件,以便于文本编辑器快速定位符号位置(变量、函数、类等)。

下载地址:http://ctags.sourceforge.net

使用方式:在代码的根目录执行如下命令即可生成tag文件:

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

这个命令有点长,可以在.vimrc的文件中加个键盘映射,像下面的样子,这样只需要按下CTRL+F12即可生成tag文件了。

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

另外,如果需要指明源代码的语言,则需要加上--languages ...


在 ArchLinux 中使用 Fcitx 输入法

Fcitx是Linux中以轻量箸称的输入法框架,短小精悍且兼容性非常好。简单记录一下Fcitx在ArchLinux中的安装配置方式。

安装输入法

执行下面的命令安装FCITX:

pacman -S fcitx-im

配置环境变量

将下面的环境变量设置加入到显示管理器的配置文件中(KDM、GDM、LightDM的配置文件为~/.xprofile,startx、Slim的配置文件为~/.xinitrc

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

配置后重新登录生效,使用CTRL+空格激活输入法,如果发现fcitx没有运行,则直接在命令行里执行fcitx即可。


通过PXE方式安装Linux系统

1 准备工作

2 建立PXE启动目录

  • 创建E:\Server\PXE目录,将Linux光盘镜像/images/pxeboot文件夹中的initrd.imgvmlinux文件拷贝到该目录中
  • E:\Server\PXE中创建pxelinux.cfg目录,将光盘镜像/isolinux文件夹中的isolinux.cfg文件拷贝到该目录中,并重命名为default
  • 将syslinux的PXE启动加载程序pxelinux.0拷贝到E:\Server\PXE ...

Linux中生成 Core Dump 文件的方法

1 什么是 Core Dump

Core Dump 又叫核心转储。在程序运行过程中发生异常时,将其内存数据保存到文件中,这个过程叫做 Core Dump。

2 Core Dump 的作用

在开发过程中,难免会遇到程序运行过程中异常退出的情况,这时候想要定位哪里出了问题,仅仅依靠程序自身的信息打印(日志记录)往往是不够的,这个时候就需要 Core Dump 文件来帮忙了。

一个完整的 Core Dump 文件实际上相当于恢复了异常现场,利用 Core Dump 文件,可以查看到程序异常时的所有信息,变量值、栈信息、内存数据,程序异常时的运行位置(甚至记录代码行号)等等,定位所需要的一切信息都可以从 Core Dump文件获取到,能够非常有效的提高定位效率。

3 如何生成 Core Dump

3 ...


Linux信号处理机制

在Linux中,信号是进程间通讯的一种方式,它采用的是异步机制。当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行。

需要说明的是,信号只是用于通知进程发生了某个事件,除了信号本身的信息之外,并不具备传递用户数据的功能。

1 信号的响应动作

每个信号都有自己的响应动作,当接收到信号时,进程会根据信号的响应动作执行相应的操作,信号的响应动作有以下几种:

  • 中止进程(Term)
  • 忽略信号(Ign)
  • 中止进程并保存内存信息(Core)
  • 停止进程(Stop)
  • 继续运行进程(Cont)

用户可以通过signalsigaction函数修改信号的响应动作(也就是常说的“注册信号”,在文章的后面会举例说明)。另外,在多线程中,各线程的信号响应动作都是相同的,不能对某个线程设置独立的响应动作。

2 信号类型

Linux支持的信号类型可以参考下面给出的列表。

2.1 在POSIX.1-1990标准中的信号列表

信号 动作 说明 ...