我编辑代码和LaTeX,并喜欢定期编译,以检查编辑是否正在做我想做的。我通常运行一个看起来像是“while true; do make -s foo.pdf; sleep 2; done &”的小bash命令行,然后编辑foo.tex并将结果重新加载到xpdf中以检查它。每次我保存我的编辑时,脚本都会生成pdf,我可以检查编辑是否按照他们的要求进行了操作。然而,在我做了几个这样的事情之后,结束我的编辑并继续前进,我有这些仍在运行的小脚本,并且我开始的每个xterm都可能被关闭。 ps只显示脚本的睡眠部分,使得很难知道启动它的正确父项。我怎么知道我看到的所有睡眠中的哪个父母是要杀的人,即如何判断哪个睡眠与我所做的make foo相关联?如何识别正在运行的bash脚本?
回答
如果我是bash -c "while true; do make -s foo.ps; sleep 2; done"
,那么ps
显示的bash命令命令具有我需要标识脚本的文件名。所以,不要直接从终端命令行运行脚本,我应该在命令行中使用命令启动bash
!感谢威廉(我认为这是Pursell),他的帖子让我想到了正确的路线! Mnm Cee建议使用适当的pid作为锁定文件,但创建这个文件需要比在命令行上轻松完成的更多的输入。可能必须编写一个单独的函数,然后调用它。
您可以使用pstree或'ps -afjx',它们都显示进程树,这可以很容易地识别父进程。
您还可以将父PID打印到每个脚本中的tmp文件中 - 并在脚本完成后删除该文件。
我可以很容易地识别父母,因为他们在运行过程中显示。我希望能够看到与睡眠相关的待处理或过去的处理,这些处理没有,或者至少我不知道如何看待它们。 – ChrisDR
显然,在创建它们之前您无法看到“待处理”进程,也无法在它们死后看到“过去”进程。但是,您可以在'ps'列表中看到每个进程的父进程ID – 2011-11-16 13:38:30
如果您经常使用该scriptlet,请将其放入脚本中。然后,您可以在进程列表中标识脚本名称。
在您输入命令的shell中,只需输入jobs
,while循环应显示在列表中。假设括号中的作业号码是3,然后输入kill %3
来杀死它。
或者,在您的ps标志中包含j
(ps j
可能是最方便的,因为它也会选择BSD默认选择的所有进程都有终端),请注意进程组ID(PGID),例如1234 ,然后做kill -- -1234
。
- 1. 如何正确sigint从另一个bash脚本运行的bash脚本?
- 2. 如何在bash脚本中运行sqlite3?
- 3. PHP:如何识别日志中正在运行的脚本实例?
- 4. 如何在bash脚本中串行运行sql脚本?
- 5. 如何识别ColdFusion下正在运行的jar版本
- 6. 如何知道bash脚本是否正在运行nohup?
- 7. QTP:如何识别脚本运行时创建的对象?
- 8. awk的运行bash脚本
- 9. 并行运行bash脚本
- 10. 并行运行bash脚本?
- 11. 如何从Java运行bash脚本
- 12. 如何从magento运行bash shell脚本?
- 13. 运行一个PHP脚本,运行一个运行bash脚本的Python脚本,挂在bash上
- 14. 在bash脚本中运行两个正在执行的命令
- 15. 如何识别bash脚本中的哪个操作系统
- 16. 在运行时识别python脚本行中的函数调用
- 17. Windows上的Ubuntu上的bash Linux,文件夹识别和运行Python脚本
- 18. 如何在运行不同程序时运行bash脚本?
- 19. 从R脚本运行bash脚本
- 20. Bash脚本运行php脚本
- 21. 从PHP脚本运行bash脚本
- 22. bash脚本从rc.local运行
- 23. 运行BASH脚本文件
- 24. 从java运行bash脚本
- 25. 从JVM运行bash脚本
- 26. 如何运行,从bash的终端运行Ruby脚本
- 27. 如何在数据库的命令行上运行postgreSQL脚本/ bash脚本
- 28. 在后台运行的Bash脚本,正在等待密钥
- 29. 如何在bash脚本(Ubuntu 17.04)中正确设置别名?
- 30. 如何更改正在运行的bash脚本中的睡眠时间
William发表了有用的评论,然后再次将其删除!我希望他能把它放回去!他的评论帮助我找到了我的问题的答案,并且我想将它投票,但它已经不存在了!如果我真的是'bash -c';做make -s fah.ps; sleep 21; done'',那么bash命令会在ps中标识它自己!我不应该从终端bash启动脚本,而应该从命令行启动一个bash命令来生成命令! – ChrisDR