前些天在执行restart脚本的时候遇到了一个奇怪的问题:
1、第一次执行进程不见了,启动失败
2、第二次重启进程成功,但是在kill的时候提示进程不存在
需要重启两次进程才能成功

查看日志文件:
第一次重启失败是因为端口被占用,那么意味着进程没有被kill掉。第二次kill提示进程不存在则是因为
在第一次重启进程的时候写入了新的进程号(然后在绑定端口监听的时候发现端口被占用,进程启动失败)

接下来需要研究的是,在执行了kill之后进程为什么没有立刻被kill掉,查资料发现:

也就是说执行kill以后,信号被放在了pending对列中,下一次cpu调度这个进程耗时较长。

查看了一下,系统600多个进程,所以暂时的处理办法是先sleep 0.1s,然后再执行kill命令

参考:

1、当执行kill -9 PID时系统发生了什么2、Linux进程状态:D

附:重启脚本

#!/bin/bash

BASEDIR=$(cd "$(dirname "$0")";pwd)
PID=./bin/process.pid # kill server
if [ -e "$PID" ]; then
cat "${BASEDIR}"/bin/process.pid | xargs kill -9
sleep 0.1
rm -rf ${BASEDIR}/bin/process.pid
echo "stop process success..."
fi mkdir -p ${BASEDIR}/log # start server as daemon
cd ${BASEDIR}/bin
chmod +x ./process
nohup ./** >> ${BASEDIR}/log/out.log 2>&1 &
echo "restart process server success..." 

linux kill进程没有立刻停止的更多相关文章

  1. linux kill进程和子进程小trick

           我们的hive web是调用polestar restful service(https://github.com/lalaguozhe/polestar-1)来执行具体的hive或者s ...

  2. Linux:kill 进程

    在使用Linux时,出现端口占用.进程已启动(但处于不可控状态)情况时如何处理? 发现已知端口被占用时,可以使用netstat -apn | grep yourPort 来查看占用该端口的进程的pid ...

  3. Linux下查找进程,kill进程

    1. ps命令用来查找linux运行的进程,常用命令: ps aux | grep 进程名:  eg:ps aux | grep admin 查找admin的进程 或者 ps -ef | grep j ...

  4. Linux下kill进程脚本

    Linux下kill进程脚本 在Linux有时会遇到需要kill同一个程序的进程,然而这个程序有多个进程,一一列举很是繁琐,使用按名字检索,统一kill Perl脚本 使用方法 kill_all.pl ...

  5. linux, kill掉占用60%多cpu的进程,几秒后换个pid 和 command 又出现

    linux, kill掉占用60%多cpu的进程,几秒后换个pid 和 command 又出现?快速清理木马流程.假设木马的名字是xysbqaxjqy,如果top看不到,可以在/etc/init.d目 ...

  6. linux 查找并kill进程

    以php以关键字查找进程 $ ps aux | grep php root             32957   0.0  0.1  2470904   8908 s002  S+    4:53下 ...

  7. linux查询进程 kill进程

    查询进程 #ps aux #查看全部进程 #ps aux|grep firewall #查询与firewall相关的进程 kill进程一 kill进程pid为711进程: #pkill -9 711 ...

  8. Linux查看进程线程个数

    1.根据进程号进行查询: # pstree -p 进程号 # top -Hp 进程号 2.根据进程名字进行查询: # pstree -p `ps -e | grep server | awk '{pr ...

  9. Linux kill和kill-9区别

    进程状态转换图 kill和kill -9,两个命令在linux中都有杀死进程的效果,然而两命令的执行过程却大有不同,在程序中如果用错了,可能会造成莫名其妙的现象. 执行kill命令,系统会发送一个SI ...

随机推荐

  1. Thread--线程间通信--管道

    在Java语言中提供了各种各样的输入/输出流Stream,使我们能够方便的对数据进行操作,其中管道流是一种特殊的流,用于在不同线程间直接传送数据.一个线程发送数据到输出管道,另一个线程从输入管道中读数 ...

  2. 《Docekr入门学习篇》——Docker仓库harbor

    Harbor Harbor仓库介绍 我们在日常Docker容器使用和管理过程中,渐渐发现部署企业私有仓库往往是很有必要的, 它可以帮助你管理企业的一些敏感镜像, 同时由于Docker Hub的下载速度 ...

  3. 吴裕雄--天生自然TensorFlow2教程:创建Tensor

    import numpy as np import tensorflow as tf tf.convert_to_tensor(np.ones([2, 3])) tf.convert_to_tenso ...

  4. one_day_one_linuxCmd---scp命令

    <坚持每天学习一个 linux 命令,今天我们来学习 scp 命令> scp 命令主要用在不同的 linux 系统之间 copy 文件,基于 ssh 登录,是一种安全的复制 scp 命令的 ...

  5. nouveau :failed to create kernel chanel,-22

    一:錯誤描述:今天在重啓 Ubuntu 的過程中,出現下圖的 grub 選項,系統重啓/開機之後出現以下畫面,然後選擇 Ubuntu 之後黑屏,提示錯誤:nouveau :failed to crea ...

  6. 题解 P4171 【[JSOI2010]满汉全席】

    什么,tarjan?那是什么? 码量太大,我选择放弃 为什么不用dfs写2-sat呢?他会伤心的说 这题2-sat的过程大佬们已经讲得非常清楚了,我就略微提一下,主要讲dfs的原理 2_sat原理 我 ...

  7. goweb-goweb基础

    goweb DNS工作原理 在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析. 如果hosts里没 ...

  8. ThreadPoolExecutor自定义线程池

    1.ThreadPoolExecutor创建线程池的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ...

  9. voxelmorph配置

    简介 VoxelMorph使用CNN实现了非监督的医学图像配准,速度较之前的方法有很大提升.主要特点有: 提出了一种基于学习的解决方案,不需要在训练过程中获取诸如ground truth对应或解剖标志 ...

  10. Unittest - Python 使用总结

    Unittest - Python 使用总结 批量执行 一.UnitTest TestSuite 控制用例执行的顺序 UnitTest 框架默认 main() 方法根据 ASCII 码的顺序加载测试用 ...