Linux多线程与信号
Linux下的线程是所谓的轻量级进程(LWP: light weight process),其与普通进程一样拥有一个庞大的task_struct结构体,一个进程中的多个线程共享内存空间,毕竟它们属于同一个进程,所以需要向外呈现一个统一的pid,因此各线程的pid存放的是进程号,又由于线程同样也是进程,因此其有自己的进程id号,Linux为了支持多线程,于是添加了一个tid字段用于存放本线程的进程号,线程组的主线程pid同tid一致。getpid系统调用用于获取本进程的进程号,那怎么获取本线程(所谓的轻量级进程)的进程号呢?我刚从网上学到了一个技巧,据说是由于glibc没有包装该系统调用,所以只好自己手动使用syscall去调用了。gettid的系统调用号保存在”/usr/include/asm/unistd_32.h”头文件中,打开该文件可以看到有如下内容:
/* 223 is unused */
#define __NR_gettid 224
#define __NR_readahead 225
因此可以使用如下方式来实现gettid函数:
pid_t gettid()
{
//直接使用224代替SYS_gettid也可以
return syscall(SYS_gettid);
}
下面这个程序较好地演示了多线程环境下使用信号的特点。线程的标识为pthread_t,它是一个结构体,直接打印会是一个地址,因此可以使用上面的gettid函数来获取本线程的进程号。
?[Copy to clipboard]View Code CPP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/*
sleep函数:
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
此函数使调用进程被挂起,直到满足以下条件之一:
1)已经过了seconds所指定的墙上时钟时间
相关文档:
2009 年 4 月 23 日
本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验,用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中,我们穿插一些 Windows 的编程用例用以对比 Linux 特性,以加深读者印象。
背景
Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微 ......
今天学到的东东:
1、查看进程所对应可执行程序的绝对路径
[1]. ps -ef | grep 进程名 获得PID
[2]. 进入proc文件系统里对应的目录:/proc/ <PID>
[3]. ls -l
exe链接对应的就是可执行文件的全路经
......
公司的服务器是CentOS 5.4(Final)版的,今天在上面安装了一回mysql5.5,记录如下:
1、从http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.5.2-m2.tar.gz 下载源码安装包到/usr/local/src
2、tar zxvf mysql-5.5.2-m2.tar.gz 解压到/usr/local/src/mysql-5.5.2-m2下
cd mysql-5.5.2-m2/
&n ......
1.在shell脚本中会用到if判断,事实上就是test加参数执行的结果,比如:
if test -f /xxx ;then YYY ;fi,但是还有另一种写法,那就是if [ abc ];then YYY,实际上“[”也是一个命令,用whereis [可以证实,该“[”程序中必然要有一个“]”作为参数,然后判断$1到"]"之间的参数的 ......
官方网站: http://fedoraproject.org/
在这儿选择需要的光盘格式镜像: http://fedoraproject.org/en/get-fedora-options#formats
i386体系: http://download.fedoraproject.org/pub/fedora/linux/releases/13/Fedora/i386/iso/Fedora-13-i386-DVD.iso
x86_64体系: http://download.fedoraproject.org/pub/fedora/lin ......