如何用脚本实现启动后关闭?

sh/bash/dash/ksh/zsh等Shell脚本
回复
gabrielxiao
帖子: 4
注册时间: 2009-05-23 19:26

如何用脚本实现启动后关闭?

#1

帖子 gabrielxiao » 2010-01-19 19:09

我有一段脚本在ubuntu下试了半天都不行希望大家能帮一下忙,要求其实很简单就是运行gapa.exe后关闭他,但试了很多次后就是不行
#!/bin/sh
wine gapa.exe
wineserver -k
在win下用DOS批处理很简单
@echo off
cd 路径
start 程序
taskkill /im 程序
exit
但在ubuntu下就是搞不懂:(
头像
leeaman
帖子: 30702
注册时间: 2007-02-02 18:14
系统: debian sid

Re: 如何用脚本实现启动后关闭?

#2

帖子 leeaman » 2010-01-19 19:11

:em06
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
头像
O_O_BOT
帖子: 2461
注册时间: 2009-05-20 19:32

Re: 如何用脚本实现启动后关闭?

#3

帖子 O_O_BOT » 2010-01-19 19:15

irc <jaua^> say: 退出脚本不是有个exit 0么
irc 聊天室
ubuntu-cn 的irc 频道为
irc.ubuntu.com 8001 #ubuntu-cn
UTF8编码 可用 irssi xchat pidgin weechat 登录

http://webchat.freenode.net/?channels=ubuntu-cn
[url]irc://irc.freenode.net/ubuntu-cn[/url]
gabrielxiao
帖子: 4
注册时间: 2009-05-23 19:26

Re: 如何用脚本实现启动后关闭?

#4

帖子 gabrielxiao » 2010-01-19 19:43

问题是运行到
wine gapa.exe
这一步后就卡住了,除非手动退出gapa.exe
不然根本就不会执行下一步
wineserver -k来自动关闭
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: 如何用脚本实现启动后关闭?

#5

帖子 BigSnake.NET » 2010-01-19 19:51

#!/bin/sh
wine gapa.exe &
wineserver -k
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
gabrielxiao
帖子: 4
注册时间: 2009-05-23 19:26

Re: 如何用脚本实现启动后关闭?

#6

帖子 gabrielxiao » 2010-01-19 21:33

BigSnake.NET 写了:#!/bin/sh
wine gapa.exe &
wineserver -k
试了不过还是不行,因为“&”是一个并列执行的符号,所以“wine gapa.exe"和"wineserver -k"是同时进行的,根本不能用“wineserver -k"来结束gapa.exe,就像下面
#!/bin/sh
a="test"
a="aaa" &
echo $a
exit 0
输出的是test
#!/bin/sh
a="test"
a="aaa"
echo $a
exit 0
输出的是aaa
头像
yingfei
帖子: 273
注册时间: 2007-09-03 18:34
来自: 羊城通

Re: 如何用脚本实现启动后关闭?

#7

帖子 yingfei » 2010-01-20 10:04

你可以 sleep 几秒再 -k 吗。
  • Ubuntu 10.10 ~
头像
c\nc
帖子: 231
注册时间: 2007-12-25 12:51

Re: 如何用脚本实现启动后关闭?

#8

帖子 c\nc » 2010-01-20 16:16

试试

代码: 全选

wine gapa.exe &
wait $(pidof gapa.exe) && wineserver -k
gabrielxiao
帖子: 4
注册时间: 2009-05-23 19:26

Re: 如何用脚本实现启动后关闭?

#9

帖子 gabrielxiao » 2010-01-20 18:34

首先感谢yingfei的提醒
yingfei 写了:你可以 sleep 几秒再 -k 吗。
用sleep后的确成功了

代码: 全选

#!/bin/sh
wine gapa.exe &
sleep 时间
wineserver -k
exit 0
另外关于
c\nc 写了:试试

代码: 全选

wine gapa.exe &
wait $(pidof gapa.exe) && wineserver -k
试过了不行,不过还是要感谢你的热心帮助!
头像
c\nc
帖子: 231
注册时间: 2007-12-25 12:51

Re: 如何用脚本实现启动后关闭?

#10

帖子 c\nc » 2010-01-21 1:39

我理解错楼主意图了,我以为是wine不能彻底退出。 :em06
cosechy
帖子: 82
注册时间: 2008-03-06 4:56

Re: 如何用脚本实现启动后关闭?

#11

帖子 cosechy » 2010-01-21 4:32

6楼的原因是,以&结尾的命令会在一个子shell中运行,修改变量不会互相影响,不是简单的时间问题

不太了解wineserver -k的原理,不过要是通过kill/killall结束程序的话,这问题大概是因为term信号初始的处理方式不是退出(但是文档里写的是。。),必须得等一个程序完全运行起来之后才能修改term的处理方式,然后才能被kill
可以改成用kill信号结束,要是感觉太暴力了可以用hup或者int,经测试也没问题

简单的说就是 xxx & kill $! 不会结束,改成 xxx & kill -hup $! 就可以了
wine的话你可以试试-k1或者-k2或者-k9
用延时的方法毕竟不保险。。万一运行的程序多系统比较慢的话说不定还是会出问题
不过这要求也真怪。。需要运行之后马上关闭的话不如直接判断一下,在这种情况下就不要运行吧
头像
pandafq
帖子: 68
注册时间: 2008-01-06 16:03

Re: 如何用脚本实现启动后关闭?

#12

帖子 pandafq » 2010-02-23 11:08

试试这个,估计可以

代码: 全选

#!/bin/sh
wine gapa.exe 1>/dev/null 2>/dev/null &
wineserver -k
我是一只小菜鸟呀,咿呀咿呀呦~~~~~~~~~~
回复