错误
在启动服务程序后,误以为“ctrl+z”可以关闭程序进程,因为在终端的确显示已中断了。
例如上图中的显示,对于正在执行的服务进程来说,“ctrl+Z”显示已停止。当时看到这里,就以为程序已经停止,也就是结束了,被杀死了。后来发现对于防止多次启动服务程序的操作来说,仍然不能重新启动一个新的服务程序。
在这里先讲下怎么实现的防止多次启动服务程序:
通过文件锁的操作来实现,在启动服务程序的main函数开头,就去获取文件锁的状态。
在上述操作之后,原来的想法是,服务程序已经杀死,可以再次启动新的服务程序,可是当真正操作的时候,发现这里尽然会被阻止。
显示服务程序正在运行,那就代表着上一次的服务程序还没有真正关闭,这个时候可以通过ps -u命令查看所有程序进程来验证该想法。
果然,里面存在./RestServer该程序进程。这时只能通过kill -9 pid来杀死该进程。
杀死进程后,再重新尝试启动服务程序,这时显示可以成功启动。
原因
经过查询资料发现,“ctrl+z”只是停止程序并在后台挂起,并不会杀死程序进程,因此导致无法重新启动。如果要关闭杀死一个程序进程,就必须使用“ctrl+c”。
从描述上,很明显的可以看到,“Ctrl+c”杀死了该程序进程,而“Ctrl+z”却只是停止了该程序进程。