免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3882 | 回复: 10
打印 上一主题 下一主题

[系统管理] 关于进程状态的疑问 [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-21 14:04 |只看该作者 |倒序浏览
我写了一个脚本,作用是每5分钟扫描一次远程服务器上的指定目录,将该目录下创建时间比当前时间超过5分钟的文件删除,然后放在crontab里每5分钟执行一次。
该脚本可以正常工作,但是当我用ps命令看进程状态的时候,却发现这条远程删除的命令被执行后并没有结束退出,而是以S的状态大量保留在系统里。
这条命令是:
  1. ssh user@my.host "cd /home/user/; ls -l --time-style=+%s|grep ^-|awk -v d=\$(date +%s) '{if(d-\$6>900)print\$7}'|xargs -r rm -f"
复制代码
以下是我用ps看到的进程状态的一部分:
  1. 12587 root      1164 S    ssh user@my.host cd /home/user; ls -l --time-style=+%s|grep ^-|awk -v d=$(date +
  2. 12647 root      1164 S    ssh user@my.host cd /home/user; ls -l --time-style=+%s|grep ^-|awk -v d=$(date +
  3. 12705 root      1164 S    ssh user@my.host cd /home/user; ls -l --time-style=+%s|grep ^-|awk -v d=$(date +
  4. 12776 root      1164 S    ssh user@my.host cd /home/user; ls -l --time-style=+%s|grep ^-|awk -v d=$(date +
  5. 12867 root      1164 S    ssh user@my.host cd /home/user; ls -l --time-style=+%s|grep ^-|awk -v d=$(date +
  6. 12926 root      1164 S    ssh user@my.host cd /home/user; ls -l --time-style=+%s|grep ^-|awk -v d=$(date +
  7. 16302 root         0 SW   [kworker/u:0]
  8. 16890 root      1516 S    /usr/sbin/crond -c /etc/crontabs -l 8
  9. 17198 root         0 SW   [kworker/u:2]
  10. 17432 root         0 SW   [kworker/0:1]
复制代码
我在网上查了这种S状态其实是一种睡眠状态。

Linux进程状态:S (TASK_INTERRUPTIBLE),可中断的睡眠状态。

处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。这些进程的task_struct结构被放入对应事件的等待队列中。当这些事件发生时(由外部中断触发、或由其他进程触发),对应的等待队列中的一个或多个进程将被唤醒。

为什么这条命令会进入睡眠状态而不能正常结束退出呢?

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2014-02-21 14:19 |只看该作者
回复 1# bikkuri

进程 不退出的原因很多. 你的这个管道太长, 不是太好分析.



我不是太理解, 为啥你要把这么复杂的一串直接写在命令行, 还要远程去执行 ?

如果是我, 我会写一个脚本, 直接scp到远程去, 然后, 我在本地再去远程执行这个脚本.


   

论坛徽章:
0
3 [报告]
发表于 2014-02-21 14:26 |只看该作者
回复 1# bikkuri

如果是要执行的话
编辑个脚本,例sample.sh
  1. #!/bin/sh
  2. cd /home/user/
  3. ls -l --time-style=+%s|grep ^-|awk -v d=\$(date +%s) '{if(d-\$6>900)print\$7}'|xargs -r rm -f
复制代码
然后
  1. ssh user@my.host /bin/sh<sample.sh
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2014-02-21 14:42 |只看该作者

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
5 [报告]
发表于 2014-02-21 15:15 |只看该作者
谢谢您的指点。
之所以不放脚本到远程服务器上,是因为远程服务器不是固定的。

回复 2# q1208c


   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
6 [报告]
发表于 2014-02-21 15:20 |只看该作者
谢谢您的指点,您的链接中提到,“在crontab中%字符被认为是换行,所以你的命令中有%时,在crontab中要加\转义”。
我的这条命令中确实含有%字符,但是我的那条命令并不是以单条命令的形式加进crontab的,
而且crontab中调用的脚本里除了这条命令还有很多其他命令都含有%字符,但都没有进入睡眠状态不退出的情况。



回复 4# waker


   

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
7 [报告]
发表于 2014-02-21 15:26 |只看该作者
回复 5# bikkuri

你可以每次 scp 过去, 然后执行, 然后再删除.
   

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2014-02-21 16:11 |只看该作者
回复 6# bikkuri

或许ssh在等tty
如果你有条件,可以试试用telnet会不会出问题
   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2014-02-21 16:19 |只看该作者
回复 7# q1208c


这样就不用scp再删除了
  1. ssh root@MachineB 'bash -s' < local_script.sh
复制代码

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
10 [报告]
发表于 2014-02-21 16:22 |只看该作者
回复 9# Shell_HAT

这倒也是个办法.

其实更一般的使用本地代码, 这么远程 ssh 去检查的, 少见.
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP