1,SIGPIPE信号:
在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的。因此我们需要重载这个信号的处理方法。调用以下代码,即可安全的屏蔽SIGPIPE:
TCP/IP四路挥手点击打开链接
2,prctl()函数应用
http://blog.youkuaiyun.com/zuokong/article/details/7318154
比如返回当前调用该函数的进程
char threadname[17]; // one more for termination
if (prctl(PR_GET_NAME, (unsigned long)threadname, 0, 0, 0) != 0) {
strcpy(threadname, "<name unknown>");
3,向socket写数据的时候经常会遇到EINTR错误~对此应该忽略即可
accept是慢系统调用,慢系统调用就是可能永远阻塞的系统调用,
EINTR说明:如果进程在一个慢系统调用(slow system call)中阻塞时,当捕获到某个信号且相应信号处理函数返回时,这个系统调用被中断,调用返回错误,设置errno为EINTR(相应的错误描述为“Interrupted system call”)。
#define RETRY_ON_EINTR(ret,cond) \
do { \
ret = (cond); \
} while (ret < 0 && errno == EINTR)
RETRY_ON_EINTR(ret, write(s, &tid, sizeof(unsigned)));
4,自旋锁在单核和多核的区别
1. 在单cpu,不可抢占内核中,自旋锁为空操作。
2. 在单cpu,可抢占内核中,自旋锁实现为“禁止内核抢占”,并不实现“自旋”。
3. 在多cpu,可抢占内核中,自旋锁实现为“禁止内核抢占” + “自旋”。
5,android查看内存的命令procrank命令~
- VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
- RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
- PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
- USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
6,linux查看系统负载(load)的命令
uptime命令
top命令
free命令
7,如何定时启动一个进程
linux的crontab命令,android上在init.rc里通过属性监听。
8,如何查看一个进程占用了哪些文件
lsof命令: 如查看init进程占用的文件用 ls -u 1
9,Linux中的task_struct和内核栈
对于每一个进程而言,内核为其单独分配了一个内存区域,这个区域存储的是内核栈和该进程所对应的一个小型进程描述符——thread_info结构
struct thread_info {
struct task_struct *task; /* main task structure */
struct exec_domain *exec_domain; /* execution domain */
unsigned long flags; /* low level flags */
unsigned long status; /* thread-synchronous flags */
__u32 cpu; /* current CPU */
__s32 preempt_count; /* 0 => preemptable, <0 => BUG */
mm_segment_t addr_limit;
struct restart_block restart_block;
unsigned long previous_esp;
__u8 supervisor_stack[0];
}