为您找到与linux定时程序相关的共200个结果:
我们知道实现电脑定时关机的方法很多,那么大家知道我们自己怎么动手去制作电脑定时关机程序吗?读文网小编分享了制作电脑定时关机程序的方法,希望对大家有所帮助。
这里用的是C语言编程,所以要用到一个编程软件,那就是vc++6.0,大家可以百度一下,文件大概有三十几兆,绿色精简版的就够我们用了。
下载安装vc++6.0
下载vc++6.0完成之后,我们把程序安装好,然后打开程序,如下图:
VC++6.0编程程序界面
下面就开始我们的编写程序的步骤了,我们需要先建立一个空的工程,点击顶部的“文件”--选择“新建-win32 Console Application,工程名字自己看着取就行了。另外位置最好选一个自己方便找到的位置,好方便我们把编译好的程序找出来,之后直接下一步就可以了,如下图所示:
新建一个编程工程文件并命名
建好工程之后,我们还要建立一个C++ Source File 的文件,用来存放C语言的源程序,步骤与上一步类似,点击 文件-新建-C++ Source File,文件名字自己去就好,接着就完成主要的准备工作了,如下图:
接下我们我们直接把下面的代码,粘贴复制到那空白的编辑框里就行了,如下图:
详细代码如下,大家直接复制粘贴进去即可:
#include
#include
using namespace std;
int main()
{
int i;
cout<<"1、关机"<
<<"2、重启"<
<<"3、注销"<
<<"4、休眠"<
<<"5、取消"<
cin>>i;
switch(i)
{
case 1:{
int j;
cout<<"1、关机"<
<<"2、定时关机"<
<<"3、取消定时关机"<
<<"4、取消"<
cin>>j;
switch(j)
{
case 1:
system("shutdown -s -t 0");
break;
case 2:{
int t;
cout<<"1、30分钟后关机"<
<<"2、60分钟后关机"<
<<"3、90分钟后关机"<
<<"4、120分钟后关机"<
<<"5、取消"<
cin>>t;
switch(t)
{
case 1:
system("shutdown -s -t 1800");
break;
case 2:
system("shutdown -s -t 3600");
break;
case 3:
system("shutdown -s -t 5400");
break;
case 4:
system("shutdown -s -t 7200");
break;
case 5:
return 0;
default:
return 0;
}
break;
}
case 3:
system("shutdown -a");
break;
case 4:
return 0;
default:
return 0;
}
break;
}
case 2:
system("shutdown -r");
break;
case 3:
system("shutdown -l");
break;
case 4:
system("shutdown -h");
break;
case 5:
return 0;
default:
return 0;
}
return 0;
}
这些都搞定之后我们也需要调试一下,看是不是真的没有错误呢,转到操作界面,我们按下F7就会自动帮我们检测语法错误了,如果没有错误的话,左下角就会显示“guanji.exe - 0 error(s), 0 warning(s)”这就证明没错误了,接着我们就可以ctrl+F5,链接运行程序了,如下图:
制作电脑定时关机软件调试
下面就是我成功编写出来的程序了,看着关机、重启的选项了吗,直接选择数字回车操作就行了,下别着急尝试哦,一不小心就关机了哦,如下图:
制作电脑定时关机软件调试
现在我们就是最后一步了,那就是到我们刚开始选择的文件位置里,编写好的可执行的EXE程序找出来,放到桌面就能正常使用了。
制作好电脑自动关机软件之后,我们可以将其快捷方式放到桌面上,需要设置定时关进的时候,点击以下即可运行了,如下图所示:
以上就是所有步骤了,这个小程序在XP、win7、win8都可以顺利运行哦
看过“自己怎么制作电脑定时关机程序”
浏览量:10
下载量:0
时间:
Linux系统能运行主要的UNIX工具软件、应用程序和网络协议,那么大家知道linux怎么自动重启程序吗?接下来大家跟着读文网小编一起来了解一下linux自动重启程序的解决方法吧。
linux下实现程序的自动重启有很多方法,这里我们介绍的是通过自己写脚本来实现,
自动重启脚本
假定需要实现重启的程序名为 test ,我们这里通过判断进程数目来判断程序是否正常。
ps -ef | grep "$1" | grep -v "grep" | wc –l 是获取$1(本例中为test)的进程数,脚本根据进程数来决定下一步的操作。通过一个死循环,每隔1秒检查一次系统中的指定程序的进程数。
代码如下:
脚本check
#!/bin/sh
#-----------------------------------# 函数: CheckProcess# 功能: 检查一个进程是否存在# 参数: $1 --- 要检查的进程名称# 返回: 如果存在返回0, 否则返回1.#---------------------------------------CheckProcess(){ # 检查输入的参数是否有效 if [ "$1" = "" ]; then return 1 fi #$PROCESS_NUM获取指定进程名的数目,为1返回0,表示正常,不为1返回1,表示有错误,需要重新启动 PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l` if [ $PROCESS_NUM -eq 1 ]; then return 0 else return 1 fi}
# 检查test实例是否已经存在while [ 1 ] ; do CheckProcess "test" CheckQQ_RET=$? if [ $CheckQQ_RET -eq 1 ]; then# 杀死所有test进程,可换任意你需要执行的操作 killall -9 test exec ./test & fi sleep 1done
脚本start:
加入limit coredumpsize 102400,设置core file的大小,一旦程序Core Dump,有迹可寻。在该脚本中后台执行check脚本,可以省去很多麻烦,
#!/bin/cshlimit coredumpsize 102400
./check &
看过“linux怎么自动重启程序”
浏览量:4
下载量:0
时间:
程序员都应该知道什么Linux命令?每个程序员,在职业生涯的某个时刻,总会发现自己需要知道一些Linux方面的知识。读文网小编分享了程序员都应该知道的8个Linux命令,希望对大家有所帮助。
我们以一些文本举例。假设我们有2个文件,里面有订单关于第三方的放置地点和发送回应。
cat order.out.log
8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99
8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
cat order.in.log
8:22:20 111, Order Complete
8:23:50 112, Order sent to fulfillment
8:24:20 113, Refund sent to processing
cat
–追加文件并在标准输出上打印
jfields$ cat order.out.log
8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99
8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
正如他的名字所说的,你可以串联多个文件
jfields$ cat order.*
8:22:20 111, Order Complete
8:23:50 112, Order sent to fulfillment
8:24:20 113, Refund sent to processing
8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99
8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
看到效果了,但我们可以提高其可读性。
sort
–对文本文件进行行排序,这里使用排序是不错的选择
jfields$ cat order.* | sort
8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
8:22:20 111, Order Complete
8:23:45 112, 1, Joy of Clojure, Hardcover, 29.99
8:23:50 112, Order sent to fulfillment
8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
8:24:20 113, Refund sent to processing
上面显示了我们想要看到的效果,但是这只是小文件。而真实的数据是很大的,有些是你不想要的数据怎么办?
grep
grep, egrep, fgrep–进行匹配输出
假设我只关心给PofEAA的订单,使用grep就可以做到。
jfields$ cat order.* | sort | grep Patterns
8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
假设订单113里面发生了一些问题,你想看到关于113的所有订单信息。没错,grep能帮你。
jfields$ cat order.* | sort | grep “:dd 113, ”
8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
8:24:20 113, Refund sent to processing
你会发现在表达式里面不止有113,这是因为113也可能出现在价格里面,或者产品里面,这样做是严格限制其查找结果。
现在我们已经发出退货订单的信息,我们每日也要给会计发送销售统计。他们要求每个PofEAA的项目,但他们只关心数量和价格,我们要把
不需要的部分删减掉。
cut
–从文件的每一行删除一部分
还是要先使用grep。
jfields$ cat order.* | sort | grep Patterns
8:22:19 111, 1, Patterns of Enterprise Architecture, Kindle edition, 39.99
8:24:19 113, -1, Patterns of Enterprise Architecture, Kindle edition, 39.99
jfields$ cat order.* | sort | grep Patterns | cut -d”,” -f2,5
1, 39.99
-1, 39.99
我们已经减少了数据,让会计一目了然。
假设会计想要把订单ID做为参考,把它放在每一行的最后,并用单引号。
sed
–流编辑器。用来处理文本转换。
下面的示例演示怎样使用它来做到我们想要的数据。
jfields$ cat order.* | sort | grep Patterns
>| sed s/”[0-9:]* ([0-9]*), (.*)”/”2, ‘1′”/
1, Patterns of Enterprise Architecture, Kindle edition, 39.99, '111′
-1, Patterns of Enterprise Architecture, Kindle edition, 39.99, '113′
lmp-jfields01:~ jfields$ cat order.* | sort | grep Patterns
>| sed s/”[0-9:]* ([0-9]*), (.*)”/”2, ‘1′”/ | cut -d”,” -f1,4,5
1, 39.99, '111′
-1, 39.99, '113′
这是一个正则表达式,但没什么复杂的。做以下事情
1.删除时间
2.捕获订单号
3.删除逗号和订单号后面的空格
4.捕获此行的其余部分
一旦我们看到了我们需要的数据,可以使用1&2让输出数据符合我们的格式要求。
uniq
–去除重复行
下面的示例演示如何grep的唯一相关的交易,削减不必要的信息,并获得计数。
jfields$ cat order.out.log | grep “(Kindle|Hardcover)” | cut -d”,” -f3 | sort | uniq -c
1 Joy of Clojure
2 Patterns of Enterprise Architecture
jfields$ cat order.out.log | grep “(Kindle|Hardcover)” | cut -d”,” -f3 | sort | uniq
Joy of Clojure
Patterns of Enterprise Architecture
find
–在目录里找文件
假设这2个文本文件存在于我们的主目录,我们不必知道他们的全名。
jfields$ find /Users -name “order*”
Users/jfields/order.in.log
Users/jfields/order.out.log
当然还有很多选项,但99%的情况下我这么做。
less
–在一个文件里面向前向后移动
让我们回到最简单的cat|sort的例子。你可以向前搜索使用”/”,向后使用”?”,2者都可以使用正则表达式。
jfields$ cat order* | sort | less
你可以试试/113.*,这将突出显示订单113。你可以使用?.*112,也将突出显示订单112,你可以用'q'退出。
看过“程序员都应该知道什么Linux命令”
浏览量:3
下载量:0
时间:
Linux系统操作中,定时删除过期文件能够释放空间内存,避免资源浪费,可使用命令实现,下面读文网小编就给大家介绍下Linux如何使用命令定时删除过期文件。
find /var/www/ -type f -mtime +30 -exec rm -f ‘{} ;’
以上命令删除30天以前的过期文件。
命令说明:
/var/www/是查找文件的路径。
-type f是指定文件类型为普通文件。
-mtime +30是指修改时间距离现在30天的文件。
-exec rm -f指执行删除匹配出来的文件并且不提示,有的系统需要带单引号,有的不需要。
将以上命令,添加到crontab中,即可实现定期删除了。
比如,每天的1点30分钟实现删除,可以这样:
代码如下:
#crontab -e
30 1 * * * find /var/www/ -type f -mtime +30 -exec rm -f ‘{} ;’
上面就是Linux使用命令定时删除过期文件的方法介绍了,在使用命令的时候,你可根据具体情况选择删除过期文件的时间,选好周期是关键。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
浏览量:3
下载量:0
时间:
对于初学者来说,Linux系统命令是主要学习的内容,在Linux众多命令中,有些命令可定时运行,下面读文网小编就给大家详细介绍下Linux中定时运行命令的用法,一起来了解下吧。
分钟 小时 天 月 星期 要执行的命令
前面五个参数中间用空格隔开,最后是要执行的命令。
详细的请参考下面
Crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序
使用cron服务,用 service crond status 查看 cron服务状态,如果没有启动则 service crond start启动它,
cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除没个用户的cron服务
crontab -e //编辑某个用户的cron服务
比如说root查看自己的cron设置:crontab -u root -l
再例如,root想删除fred的cron设置:crontab -u fred -r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls 》》 /tmp/ls.txt
编辑/etc/crontab文件,在末尾加上一行: 30 5 * * * root init 6 这样就将系统配置为了每天早上5点30自动重新启动。
需要将crond设置为系统启动后自动启动的服务,可以在/etc/rc.d/rc.local 中,在末尾加上
代码如下:
service crond start
如果还需要在系统启动十加载其他服务,可以继续加上其他服务的启动命令。
比如:
代码如下:
service mysqld start
浏览量:2
下载量:0
时间:
今天读文网小编又给大家普及下linux定时运行命令的知识,那么下面就是小编的整合内容啦~希望大家能学习到:
代码如下:
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND
#每天早上6点10分
10 6 * * * date
#每两个小时
0 */2 * * * date (solaris 5.8似乎不支持此种写法)
#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * date
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed date
#1月份日早上4点
0 4 1 jan * date
补充
在使用crontab的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中的环境变量未必一致,一个比较保险的做法是在运行的脚本程序中自行设置环境变量(export)
(1)先建一个文件crond.txt如下, 每天早上5点36分重新启动
36 5 * * * reboot
(2)上传到/opt目录
(3)运行命令
crontab /opt/crond.txt
crontab -l
让配置文件生效:如果让配置文件生效,还得重新启动cron,切记,既然每个用户下的cron配置文件修改后。也要重新启动cron服务器。
在Fedora 和Redhat中,我们应该用;
[root@localhost ~]# /etc/init.d/crond restart
如果让crond 在开机时运行,应该改变其运行级别;
[root@localhost ~]# chkconfig --levels 35 crond on
service crond status 查看 cron服务状态,如果没有启动则 service crond start启动它, cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务
浏览量:2
下载量:0
时间:
Nginx日志文件如何不定情清理,会变得越来越大,影响Nginx服务器的运行,下面读文网小编就给大家介绍下Linux中清理Nginx日志的方法,一起来了解下吧。
nginx日志文件需要手动分割,创建脚本文件clear_log.sh
文件路径/usr/local/nginx/clear_log.sh
vi clear_log.sh。输入如下内容
#!/bin/bash
cp /usr/local/nginx/logs/error.log /usr/local/nginx/error-$(date -d “yesterday” +“%Y%m%d”).log
#先复制原来的错误日志文件,请根据自己实际的日志路径填写
cat /dev/null 》 /usr/local/nginx/logs/error.log
#清空错误日志文件
cp/usr/local/nginx/logs/access.log /var/log/nginx/access/access-$(date -d “yesterday” +“%Y%m%d”).log
#先复制原来的正常访问日志
cat /dev/null 》 /usr/local/nginx/logs/access.log
#清空原来的正常访问日志
创建dellog.sh文件,路径/usr/local/nginx
vi dellog.sh
#!/bin/sh
find /usr/nginx/logs/error -mtime +7 -type f -name /*.log | xargs rm -f
find /usr/nginx/logs/access -mtime +7 -type f -name /*.log | xargs rm -f
#定期删除七天前的日志文件
启动linux下的计划任务,将刚才创建好的两个shell脚本加入此计划
crontab -e,输入如下内容
0 0 * * * /usr/nginx/clear_log.sh
#每天0点执行/usr/nginx/clear_log.sh
0 0 * * * /usr/nginx/dellog.sh
#每天0点执行 /usr/nginx/dellog.sh
保存后退出,输入命令crontab root就会看到/var/spool/cron/文件夹下看到相应的副本文件root。至此完成nginx日志按天拆分与定期清除。
逻辑详解:比如现在是3月18日0点0分,系统会自动执行clear_log.sh与dellog.sh两个shell脚本。clear_log.sh会把3月17日的日志文件分别生成为access_20140317.log与error_20140318.log,然后把原来的access.log与error.log分别清空。dellog.sh则会自动判断该文件的创建时间,如果是十五天前的就会自动清除
上面就是Linux清理Nginx日志的方法介绍了,因为Nginx日志没有自动清理的功能,一般采用切割日志的方法进行处理。
浏览量:2
下载量:0
时间:
这里读文网小编介绍Linux中的cron命令和at命令,来设置LINUX自动运行程序。但是一些命令知识并不清楚,所以读文网小编来帮助大家提升LINUX操作系统的命令知识,欢迎大家来阅读!!!
crontab文件的存放路径是/etc/crontab
cron用来执行周期性的事件,cron命令有个一个特殊的文件与之对应,内容如下
[oracle@golonglee spool]$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
[oracle@golonglee spool]$
Linux的启动模式可通过inittab文件进行配置,下面是inittab文件的内容
# cat /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
# 这里的【id:5:initdefault:】就是说本系统默认是以X11也就是x-window的模式启动。
Runlevel 0 ——init关闭所有进程并终止系统。
Runlevel 1 ——转到单用户模式
Runlevel 2 ——进入多用户的模式
Runlevel 3 ——多用户模式,也是多数服务器的默认模式。
Runlevel 4 —— 一般不使用,可以实现一些特定的登录请求。
Runlevel 5 ——X Window终端。
Runlevel 6 ——是关闭进程并重新启动系统。
/etc/rc开头的文件,一般都是系统启动后自动执行的文件。rc开头的文件很多,如下:
rc rc1.d/ rc3.d/ rc5.d/ rc.d/ rc.sysinit
rc0.d/ rc2.d/ rc4.d/ rc6.d/ rc.local
其中init是所有进程之父 init读取/etc/inittab,执行rc.sysinit脚本
运行顺序由inittab中设置的init tree决定,一般设置为: /etc/rc.d/rc0.d /etc/rc.d/rc1.d /etc/rc.d/rc2.d /etc/rc.d/rc3.d /etc/rc.d/rc4.d /etc/rc.d/rc5.d /etc/rc.d/rc6.d /etc/rc.d/rc.local
其中/etc/rc.d/rc.local默认是用户自定义的脚本
/etc/rc.d/rc.local文件内容如下:
[root@golonglee etc]# cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
经常使用的 rc.local 则完全是习惯问题,不是标准。不过使用 rc.local是个好习惯。
浏览量:2
下载量:0
时间:
Linux操作系统定时重启Tomcat服务的方法如下:
1、编写tomcat_shutdown.sh:
#!/bin/sh
export JAVA_HOME=/home/oracle/jdk1.7.0_67/
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
echo “========begin stop the tomcat========”
‘/home/oracle/apache-tomcat-7.0.29/bin/shutdown.sh’
2、编写tomcat_startup.sh:
#!/bin/sh
export JAVA_HOME=/home/oracle/jdk1.7.0_67/
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
echo “========begin start the tomcat========”
‘/home/oracle/apache-tomcat-7.0.29/bin/startup.sh’
3、在linux系统终端中,输入命令“crontab -e”:
4、在vi操作界面,输入:
01 03 * * * /home/oracle/auto_exec/tomcat_shutdown.sh
03 03 * * * /home/oracle/auto_exec/tomcat_startup.sh
5、使用“crontab -l”命令,可以查看定时任务的设置情况。
使用“tail /var/spool/mail/xxxx”命令,可以查看定时任务执行的日志。
6、如果日志中提示:
/bin/sh^M: bad interpreter: No such file or directory
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:(UltraEdit):File--》Conversions--》DOS-》UNIX即可。
上面就是在Linux操作系统定时重启Tomcat服务的介绍了,如果你遇到Tomcat服务器死机需要定时重启的话,这些方法就是解决你的问题,该方法适用于Linux操作系统。
浏览量:3
下载量:0
时间:
在Linux系统操作中,经常会遇到多进程调试的问题,其实多进程的调试没有想象中的那么复杂,下面读文网小编就给大家介绍下Linux如何调试多进程程序,感兴趣的朋友不妨来了解下。
(1)follow-fork-mode
set follow-fork-mode [parent | child] ———— fork之后选择调试父进程还是子进程
(parent: fork之后继续调试父进程;child: fork之后调试父进程。默认的是fork之后调试父进程)
set detach-on-fork [on | off] ———— 指示gdb在fork之后是否断开某个进程的调试,或交由gdb控制
(on: 断开调试follow-fork-mode指定的进程;off: gdb将控制父进程和子进程,follow-fork-mode指定的进程将被调试,另一个进程置于暂停状态)
(2)attach pid
ubuntu下gdb要使用attach pid权限是不够的,需要切换到root,或者你可以sudo chmod +s /usr/bin/gdb给gdb添加权限。
使用attach需要在父子进程代码最开始添加sleep()语句,让进程睡眠,之后在后台运行进程,通过ps获取子进程pid,最后attach pid进入调试子进程。
eg:
$./test & //使进程test在后台运行
$ps -ef | grep test //查看进程pid
结果中类似下面的形式:
XXX 12345 23456 ———————————————— 。/test //父进程
XXX 12346 12345 ———————————————— 。/test //子进程,这里的第一个数字就是子进程pid
$ gdb -q test
(gdb)attach 12346 //attach到子进程
添加的sleep()可以是类似这样的语句:
while(pause) //pause是一个标志变量
sleep(1);
在gdb调试时你只需要set pause=0使条件不满足即可执行后续代码。
(3)gdb wrapper
当父进程fork出子进程,子进程会紧接着调用exec函数来执行新的代码,这时也可以用gdb wrapper。它的优点是不用添加额外代码。
linux下将一个进程放到后台运行:
(1)。/test &
(2)“。/test” 之后按下 “ctrl+z” , 用“bg %num”返回的数字将该进程放到后台;
linux下将进程拉回前台:
用“fg %num”
上面就是Linux多进程程序调试的方法介绍了,多进程的调试我们通常使用的是gdb,当你在调试的时候多少都会用到gdb调试工具。
浏览量:4
下载量:0
时间:
一、start.sh
#!/bin/bash
cd `dirname $0`
BIN_DIR=`pwd`
cd ..
DEPLOY_DIR=`pwd`
CONF_DIR=$DEPLOY_DIR/conf
SERVER_NAME=`sed '/server.name/!d;s/.*=https://' conf/server.properties | tr -d ''`
SERVER_PORT=`sed '/server.netty.port/!d;s/.*=https://' conf/server.properties | tr -d ''`
if [ -z "$SERVER_NAME" ]; then
SERVER_NAME=`hostname`
fi
PIDS=`ps --no-heading -C java -f --width 1000 | grep "$CONF_DIR" |awk '{print $2}'`
if [ -n "$PIDS" ]; then
echo "ERROR: The $SERVER_NAME already started!"
echo "PID: $PIDS"
exit 1
fi
if [ -n "$SERVER_PORT" ]; then
SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
if [ $SERVER_PORT_COUNT -gt 0 ]; then
echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"
exit 1
fi
fi
LOGS_DIR=""
LOGS_DIR=$DEPLOY_DIR/logs
#if [ ! -d $LOGS_DIR ]; then
# mkdir $LOGS_DIR
#fi
STDOUT_FILE=$LOGS_DIR/stdout.log
LIB_DIR=$DEPLOY_DIR/lib
LIB_JARS=`find $LIB_DIR|grep .jar|awk '{print $0}'|tr "" ":"`
JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
JAVA_DEBUG_OPTS=""
if [ "$1" = "debug" ]; then
JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
fi
JAVA_JMX_OPTS=""
if [ "$1" = "jmx" ]; then
JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
fi
JAVA_MEM_OPTS=""
BITS=`file $JAVA_HOME/bin/java | grep 64-bit`
if [ -n "$BITS" ]; then
let memTotal=`cat /proc/meminfo |grep MemTotal|awk '{printf "%d", $2/1024 }'`
if [ $memTotal -gt 2500 ];then
JAVA_MEM_OPTS=" -server -Xmx1024m -Xms1024m -Xmn400m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
else
JAVA_MEM_OPTS=" -server -Xmx1024m -Xms1024m -Xmn400m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
fi
else
JAVA_MEM_OPTS=" -server -Xmx1024m -Xms1024m -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
fi
echo -e "Starting the $SERVER_NAME ...c"
nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS com.hzins.framework.server.ServerMain > $STDOUT_FILE 2>&1 &
COUNT=0
while [ $COUNT -lt 1 ]; do
echo -e ".c"
sleep 1
# if [ -n "$SERVER_PORT" ]; then
# COUNT=`echo status | nc 127.0.0.1 $SERVER_PORT -i 1 | grep -c OK`
# else
COUNT=`ps --no-heading -C java -f --width 1000 | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`
# fi
if [ $COUNT -gt 0 ]; then
break
fi
done
echo "OK!"
PIDS=`ps --no-heading -C java -f --width 1000 | grep "$DEPLOY_DIR" | awk '{print $2}'`
echo "PID: $PIDS"
#echo "STDOUT: $STDOUT_FILE"
二、stop.sh
#!/bin/bash
cd `dirname $0`
BIN_DIR=`pwd`
cd ..
DEPLOY_DIR=`pwd`
CONF_DIR=$DEPLOY_DIR/conf
SERVER_NAME=`sed '/server.name/!d;s/.*=https://' conf/server.properties | tr -d ''`
if [ -z "$SERVER_NAME" ]; then
SERVER_NAME=`hostname`
fi
PIDS=`ps --no-heading -C java -f --width 1000 | grep "$CONF_DIR" |awk '{print $2}'`
if [ -z "$PIDS" ]; then
echo "ERROR: The $SERVER_NAME does not started!"
exit 1
fi
if [ "$1" != "skip" ]; then
$BIN_DIR/dump.sh
fi
echo -e "Stopping the $SERVER_NAME ...c"
for PID in $PIDS ; do
kill $PID > /dev/null 2>&1
done
COUNT=0
while [ $COUNT -lt 1 ]; do
echo -e ".c"
sleep 1
COUNT=1
for PID in $PIDS ; do
PID_EXIST=`ps --no-heading -p $PID`
if [ -n "$PID_EXIST" ]; then
COUNT=0
break
fi
done
done
echo "OK!"
echo "PID: $PIDS"
三、restart.sh
#!/bin/bash
cd `dirname $0`
./stop.sh
./start.sh
浏览量:2
下载量:0
时间:
对于win7用户来说,一些应用程序有时会自动连接网络,来获取软件窗口中的广告或弹窗,而虽然用户可通过第三方辅助工具来限制这些程序联网,但是对于不经常使用第三方辅助软件的用户来说,那么你知道win7系统怎么利用防火墙限制指定程序连接网络吗?下面是读文网小编整理的一些关于win7系统利用防火墙限制指定程序连接网络的相关资料,供你参考。
1、在开始菜单下,打开控制面板,选择系统与安全,然后点击“Windows 防火墙”。
2、点击左边的高级设置,会出现高级安全windows防火墙设置。
3、点击左边的出站规则,新建一个出站规则。
4、在新建规则下面,选择程序,再选择该程序的安装路径。
5、点击阻止连接,并将下面的3个选框全部勾上。
6、在名称和描述里面,尽量写的稍微详细点,方面后期查看,再点击下一步,直到完成。
win7系统利用防火墙限制指定程序连接网络的相关
浏览量:2
下载量:0
时间:
win7系统在关机的时候会提示你没有关闭的程序,需要你选择关闭,有时候会很惹人烦闷,那么win7怎样取消关闭程序提示功能呢?读文网小编分享了win7取消关闭程序提示功能的方法,希望对大家有所帮助。
1、在“运行”中输入“gpedit.msc”后按回车。
2、依次展开“计算机配置”→“管理模板”→“系统”→“关机选项”,如图:
3、双击右侧窗口中的“关闭会阻止或取消关机的应用程序的自动终止功能”,如图:
4、选择“已启用”选项,并点击“确定”按钮,如图:
通过以上设置后就取消了win7关机时的强制关闭程序提示,让你的关机更加顺畅。有需要的用户请跟着以上步骤设置吧。
看过“win7怎样取消关闭程序提示功能”
浏览量:2
下载量:0
时间:
对于win7新用户,可能很多朋友在运行软件或者安装的时候,会经常遇到以管理员身份运行的窗口,那么Win7怎么设置总是以管理员身份运行程序呢?下面跟着读文网小编来一起了解下吧。
点击底端任务栏上的“Window”按钮,找到“计算机”。
右键单击“计算机”,进入“管理”。
计算机管理——本地用户和组——用户。
(双击“本地用户和组”,找到“用户”。)
单击“用户”,找到Administrator,右键单击进入“Administrator属性”,取消“账户已禁用”前勾选的勾。
随便选一个程序图标,鼠标右键单击图片,选择“属性”。需要在选项卡“兼容性”和“快捷方式”进行操作,勾选以管理员身份操作,如图。
浏览量:3
下载量:0
时间:
相信很多win7系统用户,在运行某些安装程序时,系统自动弹出阻止运行的窗口对话,同时还提示该程序可能存在风险的问题,这时用户即选择继续或取消运行程序,对于win7系统下出现该问题,并不是所有程序都是不安全的,那么你知道怎么取消win7运行安装程序出现阻止窗口吗?下面是读文网小编整理的一些关于取消win7运行安装程序出现阻止窗口的相关资料,供你参考。
1、在开始菜单中打开控制面板,点击用户和家庭安全,再点击用户帐户;
2、接下来点击“更改用户帐户控制设置“选项;
3、将滑块移动至”从不通知“,然后应用退出。
取消win7运行安装程序出现阻止窗口的相关
浏览量:2
下载量:0
时间:
win7用户在使用时总会遇上程序未响应的事情,那么Win7系统程序未响应怎么办呢?接下来大家跟着读文网小编一起来了解一下Win7系统程序未响应的解决方法吧。
第一步、在桌面打开win7系统 的“开始”菜单,进入“所有程序”之后进入“附件”,点击“运行”。
第二步、在运行的界面输入“regedit”回车之后打开win7旗舰版的注册表编辑器。
第三步、按照这个顺序来打开win7需要编辑的注册表:HKEY_CURRENT_USERControl PanelDesktop,在Desktop文件夹的右侧空白处新建一个“DWORD 32位值”并且改名为“WaitToKillAppTimeout”,之后把数值修改到0之后保存退出就可以了。
浏览量:2
下载量:0
时间:
不知是什么原因Win7运行应用程序时总是提示“非法操作”,那么如何解决Win7运行应用程序时提示“非法操作”呢?读文网小编分享了解决Win7运行应用程序时提示“非法操作”的方法,希望对大家有所帮助。
一、原因分析如下:
1、软件之间的互相不兼容的原因。
2、有时如果倘若未安装声卡驱动程序,运行时就会产生非法操作错误。
3、内存条质量不佳引发的(有时提高内存延迟时间,也就是将系统默认的3改为2便可解决此类故障)。
4、驱动程序未正确安装,此类故障一般表现在显卡驱动程序之上,有时在打开某些网页时出现非法操作的提示。
5、可能是系统文件被更改或损坏。倘若由此引发则打开一些系统自带的程序时就会出现非法操作的提示。
二、“非法操作”的具体含义和解决方法
1、当出现停止错误码编号为:0x0000002E
说明文字ATA-BUS-ERROR
原因分析:系统内存奇偶校验出错,通常此类故障由硬件问题导致。
解决方法:
1)将所有新近安装的硬件(比如RAM.适配器、硬盘、调制解调器等等) 卸载掉。
2)运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件。
3)禁用BIOS内存选项,例如cache或shadow。
4)确保硬件设备驱动程序和系统BIOS都是最新版本。
5)使用硬件供应商提供的系统诊断,运行内存检查来查找故障或不匹配的内存。
6)在启动后出现可用作系统列表时,按F8快捷键,在Windows高级选项菜单屏幕上,选择“启动VGA模式:然后按回车键,如果这样做还不能解决问题,可能需要更换不同的视频适配器列表,有关支持的视频适配器列表。
2、当出现停止错误码编号为:0x0000000A
说明文字:IRQL-NOT-LESS-OR-EQUAL
原因分析:这是因为驱动程序使用了不正确的内存地址导致的。
解决方法:
1)如果无法登陆的话就重新启动计算机,如果出现可用的作系统列表时,按F8键进入安全模式,在Windows高级选项菜单屏幕上,选择“最后一次正确的配置”,然后按回车键。
2)运行所有的系统诊断软件,尤其是检查内存
3将新近安装的硬件(RAM,适配器,硬盘,调制解调器等等),驱动程序或软件等禁用或卸载掉。
4)对安装了所有的新硬件或软件进行检查,是否正确安装。如果这是一次全新安装,请与硬件或软件的制造商联系,获得可能需要的任何Windows更新或驱动程序。
5)禁用 BIOS内存选项,例如cache或shadow
3、当出现停止错误码编号为:0x00000058
说明文字:FTDISK-INTERN-ERROR
通常的原因:容错集内的某个主驱动器发生故障引发的。
解决方法:使用Windows安装盘启动计算机,使用镜象系统驱动器引导。
4、当出现停止错误码编号为:0x00000023或0x00000024
说明文字:FAT-FILE-SYSTEM或MTFS-FILE-SYSTEM
原因分析:问题出现在Ntfs.sys(允许系统读写NTFS驱动器的驱动程序文件)内。
解决方法:
1)运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件。
2)禁用或卸载所有的反病毒软件,磁盘碎片整理程序或备份程序。
3)通过在命令提示符下运行Chkdsk /f命令检查硬盘驱动器是否损坏,然后重新启动计算机。
5、当出现停止错误码编号为:0x0000001E
说明文字:KMODE-EXPTION-NOT-HANDLED
原因分析:这是由于内核模式进程试图执行一个非法或未知的处理器指令导致的。
解决方法:
1)确保系统有足够的空间,尤其是在执行一次新安装的时候。
2)如果停止错误消息指出了某个特定的驱动程序,那么就禁用那个驱动程序。
3)如果无法启动计算机的话,就在开机的时候进入安全模式启动,以便删除或禁用该驱动程序。
4)如果有非 Microsoft支持的视频驱动程序,尽量切换到标准的VGA驱动程序或Windows提供的适当驱动程序。
6、当出现停止错误码编号为:0x0000003F
说明文字:NO-MOR-SYSTEM-PTES
原因分析:是没有正确清理驱动程序所导致的。
解决方法:将所有的反病毒软件,磁盘碎片处理程序或备份程序禁用或卸载掉即可
看过“如何解决Win7运行应用程序时提示“非法操作””
浏览量:6
下载量:0
时间:
“将此程序锁定到任务栏”选项,相信大家都不会陌生,因为在我们安装完某个软件后,他都会默认锁定在任务栏,以方便大家对其的使用。那么你知道win7系统回收站右键属性菜单消失了怎么办吗?下面是读文网小编整理的一些关于win7系统回收站右键属性菜单消失了的相关资料,供你参考。
1、打开桌面左下角处的开始菜单,然后在其菜单中选择“运行”。在打开的运行对话框中输入gpedit.msc命令,并执行该命令。
2、此时可以看到深度系统本地组策略编辑器被打开了,在其左边菜单的列表中依次选中“用户配置”-“管理模板”-“开始菜单和任务栏”。
3、然后在其右边对应的窗口中,找到“不允许将程序附加到任务栏”。双击打开进入编辑窗口,在其编辑对话框中将“未配置”修改为“已启用”。
win7删除将此程序锁定到任务栏选项的相关
浏览量:3
下载量:0
时间: