C++程序作为Linux服务启动时出core的位置

来源:互联网 发布:如何开网络主播公司 编辑:程序博客网 时间:2024/06/05 00:50

首先,要确保生成core,需要运行命令

ulimit -c unlimited

这个在脚本中设置还是很简单的,比如在/etc/init.d/data_service脚本中:

PROGRAM=/home/dist/tcp/data_service_dtest -x $PROGRAM || exit 0case "$1" in  start)     log_begin_msg "Starting data service"     ulimit -c unlimited     $PROGRAM /home/dist/tcp/config.xml &     cd -     log_end_msg 0     ;;  stop)     PID=`pidof data_service_d`     log_begin_msg "Stopping data service"     if [ ! -z "$PID" ]; then     kill -15 $PID     fi     log_end_msg 0     ;;  restart)     $0 stop     $0 start     ;;  *)     log_success_msg "Usage: service data_service {start|stop|restart}"     exit 1esacexit 0

但是很快就发现,core文件的位置不在/home/dist/tcp目录下,而是在/ 目录下。

这是通过pidof data_service_d 找到进程id,然后查到cwd链接指向的是/

ot@vm6:/# pidof data_service_d12326root@vm6:/# ls /proc/12326/cwd -alhlrwxrwxrwx 1 root root 0 Sep 24 11:41 /proc/12326/cwd -> /

我希望能够改变目录所在的位置,直接放到/home/dist/tcp目录下。其实很简单,在启动脚本中先进入/home/dist/tcp/目录,然后再启动程序,即可。

!/bin/sh                                                                                                                                                                                                         ### BEGIN INIT INFO                                                                                                                                                                                               # Provides:     chenshu                                                                                                                                                                                           # Required-Start:                                                                                                                                                                                                 # Required-Stop:                                                                                                                                                                                                  # Default-Start:        2 3 4 5                                                                                                                                                                                   # Default-Stop:         0 1 6                                                                                                                                                                                     # Short-Description: dataservice                                                                                                                                                                                  # Description: dataservice server                                                                                                                                                                                 ### END INIT INFO                                                                                                                                                                                                 . /lib/lsb/init-functionsPROGRAM=/home/dist/tcp/data_service_dtest -x $PROGRAM || exit 0case "$1" in  start)     log_begin_msg "Starting data service"     cd /home/dist/tcp     ulimit -c unlimited     ./data_service_d ./config.xml &     cd -     log_end_msg 0     ;;  stop)     PID=`pidof data_service_d`     log_begin_msg "Stopping data service"     if [ ! -z "$PID" ]; then     kill -15 $PID     fi     log_end_msg 0     ;;  restart)     $0 stop     $0 start     ;;  *)     log_success_msg "Usage: service data_service {start|stop|restart}"     exit 1esacexit 0

再检查一下:

root@vm6:/# pidof data_service_d12680root@vm6:/# ls /proc/12680/cwd -alhlrwxrwxrwx 1 root root 0 Sep 24 12:01 /proc/12680/cwd -> /home/dist/tcp






原创粉丝点击