加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Unix上的Tcl中,如何杀死用exec启动的后台进程?

发布时间:2020-12-15 21:30:02 所属栏目:安全 来源:网络整理
导读:我想通过使用Tcl的exec命令从Tcl程序中启动Unix后台进程.但是,我想在将来的任意时间以编程方式从同一个Tcl程序中删除后台进程.我怎样才能最好地完成这个? bash$cat loop.bash#!/bin/bashwhile [ 1 ]; do sleep 5; done;bash$tclsh% exec /home/dana/travis/
我想通过使用Tcl的exec命令从Tcl程序中启动Unix后台进程.但是,我想在将来的任意时间以编程方式从同一个Tcl程序中删除后台进程.我怎样才能最好地完成这个?

bash$cat loop.bash
#!/bin/bash
while [ 1 ]; do sleep 5; done;

bash$tclsh

% exec /home/dana/travis/loop.bash &
6598

% puts "How do I kill the background process started by the previous exec command?"
How do I kill the background process started by the previous exec command?

%

解决方法

在tclsh环境中,您仍然可以访问 pskill之类的命令.我重新创建了循环脚本,然后进入了tclsh会话:

$tclsh
% exec /path/to/loop.sh &
22267% ps        
  PID TTY          TIME CMD
19877 pts/0    00:00:00 bash
22212 pts/0    00:00:00 emacs-x
22317 pts/0    00:00:00 tclsh
22319 pts/0    00:00:00 loop.sh
22326 pts/0    00:00:00 sleep
22327 pts/0    00:00:00 ps
% kill 22319
% ps      
  PID TTY          TIME CMD
19877 pts/0    00:00:00 bash
22212 pts/0    00:00:00 emacs-x
22317 pts/0    00:00:00 tclsh
22332 pts/0    00:00:00 ps

如果你想从tcl脚本中执行此操作,这里有一个简短的示例,它显示了exec’ed进程启动后的ps结果,然后是停止后的结果:

#!/usr/bin/tclsh
set id [exec /path/to/loop.sh &]
puts "Started process: $id"
set ps [exec /bin/ps]
puts "$ps"
exec /usr/bin/kill $id
puts "Stopped process: $id"
set ps [exec /bin/ps]
puts "$ps"

如果您的系统在不同目录中具有ps和kill,则必须相应地修改脚本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读