字面意思上是复制句柄的意思 其实他就是这个意思 :) 。谷歌搜索看了很多例子,发现只有两种用处。
1。复制一份句柄,相当于引用计数器+1,被复制的那一份关闭了 复制出来的那一份还可以继续用。
2。进程间复制句柄。默认a进程的句柄不能在b进程中用,b的也不能在a用。但是通过DuplicateHandle复制出来的可以。
目前大概这么理解,不保证我说的是对的。
字面意思上是复制句柄的意思 其实他就是这个意思 :) 。谷歌搜索看了很多例子,发现只有两种用处。
1。复制一份句柄,相当于引用计数器+1,被复制的那一份关闭了 复制出来的那一份还可以继续用。
2。进程间复制句柄。默认a进程的句柄不能在b进程中用,b的也不能在a用。但是通过DuplicateHandle复制出来的可以。
目前大概这么理解,不保证我说的是对的。
版本1.10
〜〜〜〜〜〜〜〜〜〜〜〜
- 更改:
*更名为plutil plistutil不能掩盖苹果的plutil的
*的固定用Cython绑定(破1.9)
*增加了对PLIST_UID节点类型,C ++,用Cython,痛饮绑定
- 注意事项:
在未来版本中支持SWIG的Python绑定将被丢弃。
将被保存在源代码树现在的绑定,但我们建议
更新您的Python代码,,用Cython绑定,而不是使用。
版本1.9
〜〜〜〜〜〜〜〜〜〜〜
- 更改:
*支持添加处理UID的节点类型
*修正崩溃时,转换的Plist包含注释
*修复plist_data_compare()
*修正DST为PLIST_DATE处理
*的修复plist_dict_set_item()和plist_array_set_item()
*的修复用Cython字符串的plist处理
*修正无效的内存访问在copy_plist_data()
*修正了几个编译器警告
官网地址 http://cgit.sukimashita.com/libplist.git
ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS; 为这个参数时 应该调用CloseHandle(ShellInfo.hProcess);关闭句柄。
ShellInfo.fMask = SEE_MASK_NOCLOSEPROCESS|SEE_MASK_FLAG_NO_UI; 可以无UI界面的警告或者错误。
WaitForSingleObject(ShellInfo.hProcess, dwMilliseconds); 阻塞或指定时间等待结束。
GetExitCodeProcess(ShellInfo.hProcess, &dwReturn); 获取返回值。
ShellInfo.lpParameters = cmd; 如果这里含有路径 应该用双引号引起来。
自己照着网上的教程安装vsftpd,完成后登录时直接530验证失败错误,可以确定是验证的问题。后来检查了N久,在另一台vps都没错,两台唯一的区别就是一台是64位的,一台32位的。最后搜索 64位 vsftpd 在一篇文章中有些注意 lib库 和 lib64库 的问题。
32位的应该这样:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
64位的应该这样:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
tcmalloc是什么东西?TCMalloc (google-perftools) 是用于优化C++写的多线程应用,比glibc 2.3的malloc快。这个模块可以用来让MySQL在高并发下内存占用更加稳定。(百度百科)
用网上的方法加入到lnmp的 mysql和nginx 是不行的。因为nginx是要编译的时候加进去的,mysql lnmp默认是全部静态编译的。
所以要修改lnmp的安装脚本,由于静态编译所以安装lnmp之前安装 tcmalloc。
64位系统的要装以下的 32位系统的忽略 {
wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz
tar xf libunwind-1.1.tar.gz
cd libunwind-1.1
./configure --enable-shared
make && make install
}
下载
wget http://gperftools.googlecode.com/files/gperftools-2.0.tar.gz
解压
tar xf gperftools-2.0.tar.gz
cd gperftools-2.0
配置
32位系统的 {
./configure --enable-shared
}
64位系统的 {
./configure --enable-shared --enable-frame-pointers
}
编译安装
make && make install
一切顺利的话
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
下载
wget -c http://soft.vpser.net/lnmp/lnmp0.9-full.tar.gz
解压
tar xf lnmp0.9-full.tar.gz
cd lnmp0.9-full
修改安装脚本,我这里用的是 centos 的
vi ./centos.sh
让mysql支持tcmalloc
大概在306行 尾部增加
--with-mysqld-ldflags=-ltcmalloc
大概在308行 尾部增加
--with-mysqld-ldflags=-ltcmalloc
让nginx支持tcmalloc
大概在460行尾部增加
--with-google_perftools_module
wq退出保存后,执行./centos.sh 按平时安装lnmp
lnmp安装完成后还要修改一些nginx参数
mkdir -p /tmp/tcmalloc/
chown -R www:www /tmp/tcmalloc/
编辑
vi /usr/local/nginx/conf/nginx.conf
worker_rlimit_nofile 51200; 下面一行增加(反正在外面)
google_perftools_profiles /tmp/tcmalloc/;
wq 保存退出
然后重启lnmp
执行 lsof -n | grep tcmalloc 能看到说明成功了。
nginx 12256 www 9w REG 0,29 0 13011440 /tmp/tcmalloc/.12256
mysqld 13425 mysql mem REG 253,0 10685079 /usr/local/lib/libtcmalloc.so.4.1.0 (path dev=0,29)