一个echo引起的进程崩溃

 

最近在编写后台程序时遇到一个问题。发现后台程序总是莫名其妙的die掉。经排查,发现罪魁祸首是一个echo。 案情重现: 1.ssh登陆服务器 2.新建一个php文件test.php,代码如下: <?php sleep(50); echo "aaa\n"; file_put_contents("/tmp/test.txt",time()); ?> 3.用以下命令执行test.php程 ...

linux中使用valgrind检测内存泄露

 

众所周知,c或者c++编写的程序很容易出现内存泄露问题。valgrind是一个很好的工具,可以检测程序中的内存泄露问题。 什么是内存泄露 内存泄露可以分为两种: 一种是,程序中有指针指向通过malloc或者new申请的内存,但是在程序结束前,一直未收回。如果这种内存一直增加的话,可能导致内存耗尽。不过程序结束后系统会自 ...

【IPC通信】基于管道的popen和pclose函数

 

标准I/O函数库提供了popen函数,它启动另外一个进程去执行一个shell命令行。 这里我们称调用popen的进程为父进程,由popen启动的进程称为子进程。 popen函数还创建一个管道用于父子进程间通信。父进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传递的参数。下在给出popen、pclose的定 ...

linux中c语言errno的使用

 

在linux中使用c语言编程时,errno是个很有用的动动。他可以把最后一次调用c的方法的错误代码保留。但是如果最后一次成功的调用c的方法,errno不会改变。因此,只有在c语言函数返回值异常时,再检测errno。 errno会返回一个数字,每个数字代表一个错误类型。详细的可以查看头文件。/usr/include/asm/errno.h 如何把errno ...

linux man page 命令手册

 

Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可。 Linux的man手册共有以下几个章节: 1 Executable programs or shell commands 2 System calls (functions provided by the kernel) 3 Library calls (functions within program libraries) 4 Special files (usually foun ...

php中assert方法的安全问题

 

php中assert本来是用于调试的,如果assert方法内的代码不为true,则给个Warning提醒。如下面的代码。 <?php assert('1==2'); ?> 执行后会有如下输出: Warning: assert(): Assertion "1==2" failed in D:\green\APMServ5.2.6\www\htdocs\phpinfo.php on line 2 有个assert_option方法可以对assert进行一些控制 ...

linux查看进程端口号,进程id,运行环境变量等信息

 

如何查看进程的端口号? $ netstat -lnp | grep exf tcp 0 0 0.0.0.0:9101 0.0.0.0:* LISTEN 5791/exfilter 注释:上面命令中的exfilter是进行名称.上面的9101就是监控的端口号,5791是进程的进程id。 如果进程没有像exfilter一样监控一个端口,如何查看进程的id? ps aux | grep exfilter ro ...

在php中如何使用json_decode解析gbk编码的json字符串

 

今天看到csdn的bbs上有人问如何用json_decode解析gbk编码的串。 大家都知道,json都是utf8编码的。json_encode后的字符串都是会变成"\u4fe1\u6d77\u9f99"格式。 如下面的代码: $arr = "信海龙"; echo json_encode($arr); 输出结果为:"\u4fe1\u6d77\u9f99" 如果你有一个符合json格式的gbk编码的字符串,如 ...

从MySQL到Redis 提升数据迁移的效率

 

场景是从MySQL中将数据导入到Redis的Hash结构中。当然,最直接的做法就是遍历MySQL数据,一条一条写入到Redis中。这样可能没什么错,但是速度会非常慢。而如果能够使MySQL的查询输出数据直接能够与Redis命令行的输入数据协议相吻合,可能就省事多了。 根据测试800w的数据迁移,时间从90分钟缩短到2分钟。 具体案例如下 ...

统计一个二进制字符串中1的个数的算法

 

记得在吴军的《数学之美》中有一章讲到布尔代数和搜索引擎的索引。大概是讲通过一个二进制字符串来标识当前关键词在那些文档中出现过。二进制字符串中1的位置就是出现这个词文档的id。 如,一淘 对应一个二进制字符串 1010001。其中在1,5,7三个位置出现了1,说明文档id为1,5,7的文章包含词“一淘”。但是在书中没有说 ...

使用正则检测是否为utf8编码

 

以下函数用来检测字符编码是不是utf-8,是返回true,不是返回false。 function is_utf8($string) { return preg_match('%^(?: [\x09\x0A\x0D\x20-\x7E] # ASCII | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2 ...