
2008年8月21日
內(nèi)容如下:

Code
<script>
setInterval( function() {
var date = new Date();
if (date.getMinutes() == 0 || date.getMinutes() == 30) {
alert("老大,喝點(diǎn)水,休息一下!");
}
}, 1000 * 60);
</script>
大家注意身體啊

--------------------------
09博客園紀(jì)念T恤新聞:
網(wǎng)站評(píng)測:搜狐博客 VS 我燒網(wǎng)網(wǎng)站導(dǎo)航:
博客園首頁 個(gè)人主頁 新聞 社區(qū) 博問 閃存 找找看文章來源:
http://www.cnblogs.com/xiaoao808/archive/2009/08/25/1553578.html
防盜鏈原理:
http標(biāo)準(zhǔn)協(xié)議中有專門的字段記錄referer
一來可以追溯上一個(gè)入站地址是什么
二來對(duì)于資源文件,可以跟蹤到包含顯示他的網(wǎng)頁地址是什么。
因此所有防盜鏈方法都是基于這個(gè)Referer字段
網(wǎng)上比較多的2種
一種是使用apache文件FileMatch限制,在httpd.conf中增加 ( 其實(shí)也可以將把下面的語句存成一個(gè).htaccess文件),并放到你的網(wǎng)站的根目錄(就是www/html目錄),這樣子別人就沒有辦法盜連你的東東了~~
SetEnvIfNoCase Referer "^
Order Allow,Deny
Allow from env=local_ref
Allow from 127.0.0.1
這種很方便禁止非允許訪問URL引用各種資源文件
請(qǐng)大家注意,把第一句"^http://www.linji.cn
我應(yīng)該這么寫的
"^
第二種是使用rewrite,需要增加apache的mode_rewrite,支持.htaccess文件目錄權(quán)限限制
在虛擬主機(jī)根目錄增加.htaccess文件,描述從定向,把非本地地址refer的圖片文件都從定向到警告圖片或者警告網(wǎng)頁上。
首先要確認(rèn)你的服務(wù)器或空間的服務(wù)器解譯引擎為Apache2,還有支持.htaccess客戶設(shè)置文件,
如果你有自己的服務(wù)器就請(qǐng)先對(duì)./conf/httpd.conf 文件做以下修改
找到:#LoadModule rewrite_module modules/mod_rewrite.so
把前面的 # 給去丟
找到等一個(gè) AllowOverride None 改為 AllowOverride All
重啟Apache2服務(wù)器
接下就是做一個(gè) .htaccess 文件了,其 .htaccess 文件內(nèi)容為
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://aaoo.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://aaoo.net$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.aaoo.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.aaoo.net$ [NC]
RewriteRule .*.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ http://down.yoyo.com.ru/err.html [R,NC]
其中有色的地方都是要改為你的:
紅色:就是改為你提供下載頁面的地址,也就是只有通過這個(gè)地址才可以下載你所提供的東東。
藍(lán)色:就是要保護(hù)文件的擴(kuò)展名(以|分開),也就是說以這些為擴(kuò)展名的文件只有通過紅色的地址才可以訪問。
綠色:如果不是通過紅色的地址訪問藍(lán)色這些為擴(kuò)展名的文件時(shí)就回重定向到綠色地址上。
這個(gè)方法有個(gè)好處是,不同的虛擬主機(jī)用不同的描述定義。
接下就是怎么用 .htaccess 文件來實(shí)現(xiàn)防盜鏈了。
首先要在空間上建兩個(gè)目錄(當(dāng)然目錄名隨你),一個(gè)為 web 另一個(gè)為 down ,
web 是用來放下載頁面的(或下載程序),down 當(dāng)然就是放你提供的東東的啦,
把 .htaccess 文件的紅色部分改一下,改為http://你的域名/web。藍(lán)色部分
改為你要保護(hù)文件的擴(kuò)展名。綠色部分改為http://你的域名/web。改后保存
.htaccess 文件把它上傳到 down 目錄。
還有第三種:
我在解決plog禁止盜鏈的時(shí)候,發(fā)現(xiàn)個(gè)問題,也算個(gè)好方法。
plog把所有資源都自己管理起來,用resserver.php來動(dòng)態(tài)顯示,這樣統(tǒng)一的入口方便添加權(quán)限操作。
同時(shí)造成上面2種方法無法使用,因?yàn)椴辉偈莂pache直接訪問資源文件,而是php通過文件讀取。
因此只能在代碼中做手腳:在讀取資源文件輸出之前,加如下判斷代碼
引用
$referer = $_SERVER['HTTP_REFERER'];
$selfurl = $_SERVER['HTTP_HOST'];
if(false == strpos($referer,$selfurl))
{
echo '非法盜鏈!';
exit(1);
}
這里有些偷懶,直接看引用地址中是否包含host地址,不過原理就是這樣,判斷referer是否是本站地址。
我們常常在下載的時(shí)候,也碰到盜鏈網(wǎng)站無法下載,報(bào)盜鏈的問題。要下載這類文件最簡單的方法就是改referer
比方flashget中,網(wǎng)址下面的"引用"一欄中,直接填寫下載地址就可以了。

--------------------------
09博客園紀(jì)念T恤新聞:
微軟:不一樣的PowerPoint 2010網(wǎng)站導(dǎo)航:
博客園首頁 個(gè)人主頁 新聞 社區(qū) 博問 閃存 找找看文章來源:
http://www.cnblogs.com/xiaoao808/archive/2009/08/21/1551756.html
這兩天完善了一下視頻轉(zhuǎn)換這個(gè)東西,以前做的那套東西上傳完之后就開始轉(zhuǎn)換,無法適應(yīng)大并發(fā)量下的視頻轉(zhuǎn)換(我覺得同時(shí)有10個(gè)ffmpeg進(jìn)程在轉(zhuǎn)視頻服務(wù)器肯定要掛掉),所以我用了另一套方案,視頻上傳之后先不轉(zhuǎn)換,把視頻的基本信息存到數(shù)據(jù)庫中,然后由程序定時(shí)的從數(shù)據(jù)庫中讀取數(shù)據(jù),依次轉(zhuǎn)換視頻。具體做法是:1、上傳文件,將文件名存入數(shù)據(jù)庫,同時(shí)在數(shù)據(jù)庫標(biāo)明videostat字段為0(表示未轉(zhuǎn)換)
2、通過程序,每隔30秒(根據(jù)不同情況可以改變)取出一個(gè)未轉(zhuǎn)換(videostat=0)且失敗次數(shù)小于5(confailtime<5)的紀(jì)錄
3、開始轉(zhuǎn)換視頻,這里要先將數(shù)據(jù)庫中videostat字段改為2(表示正在轉(zhuǎn)換)不然30秒鐘轉(zhuǎn)換不完下個(gè)進(jìn)程又會(huì)讀到這條紀(jì)錄開始轉(zhuǎn)換......
4、等待轉(zhuǎn)換進(jìn)程結(jié)束,如果成功將相應(yīng)紀(jì)錄的videostat字段的值改為1(表示轉(zhuǎn)換成功),若轉(zhuǎn)換失敗則將失敗次數(shù)字段加一(confailtime=confailtime+1)
在鼓搗這東西的過程中,遇到了一個(gè)問題,如果一個(gè)進(jìn)程先執(zhí)行p.waitFor();方法而后輸出命令行中的結(jié)果是不行的,即:

Code
int flag = p.waitFor();
InputStream inErr = p.getErrorStream();
InputStream inIns = p.getInputStream();
BufferedReader brErr = new BufferedReader(new InputStreamReader(
inErr));
BufferedReader brIns = new BufferedReader(new InputStreamReader(
inIns));
// inErr讀取輸出信息開始
String strsErr = "";
String strErr = brErr.readLine();
while (strErr != null) {
strsErr = strsErr + strErr + "\n";
System.out.println(strErr);
strErr = brErr.readLine();
}
// inErr讀取輸出信息結(jié)束
// inIns讀取輸出信息開始
String strsIns = "";
String strIns = brIns.readLine();
while (strIns != null) {
strsIns = strsIns + strIns + "\n";
System.out.println(strIns);
strIns = brErr.readLine();
}
如果這樣執(zhí)行的話進(jìn)程會(huì)掛起,無法繼續(xù)下午,而正確的方法是先讀取命令行的數(shù)據(jù),再來waitFor();
還有一點(diǎn)需要注意的是獲得命令行的輸出結(jié)果先要從錯(cuò)誤流中獲得,即(ErrorStream),而非從輸入流(InputStream)中獲得,很有用的經(jīng)驗(yàn)。

--------------------------
09博客園紀(jì)念T恤新聞:
自由軟件基金會(huì)列舉Windows 7之七宗罪網(wǎng)站導(dǎo)航:
博客園首頁 個(gè)人主頁 新聞 社區(qū) 博問 閃存 找找看文章來源:
http://www.cnblogs.com/xiaoao808/archive/2009/08/04/1538824.html
很久不在這里發(fā)帖子了,最近在家閑來無事,想到轉(zhuǎn)視頻的那東西又要做了,遂翻出以前的帖子,看到一年前豐哥讓我做一下文件上傳的進(jìn)度條....額~~那就做一下吧。
東西很簡單,主要用到commons-fileupload,其中有一個(gè)progressListener的接口,該接口可以實(shí)現(xiàn)實(shí)時(shí)更新已上傳文件的大小,有了這個(gè)還說什么呢?
給出代碼

代碼
package lc.progress;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import lc.progress.vo.fileUploadStatus;
import org.apache.commons.fileupload.ProgressListener;
public class myProgressListener implements ProgressListener {
private HttpSession session;
public myProgressListener(HttpServletRequest req) {
session=req.getSession();
fileUploadStatus status = new fileUploadStatus();
session.setAttribute("status", status);
}
/* pBytesRead 到目前為止讀取文件的比特?cái)?shù)
* pContentLength 文件總大小
* pItems 目前正在讀取第幾個(gè)文件
* 只要在session中實(shí)時(shí)保存文件上傳的狀態(tài)(這里我用fileUploadStatus類來封裝)
*/
public void update(long pBytesRead, long pContentLength, int pItems) {
// TODO Auto-generated method stub
fileUploadStatus status = (fileUploadStatus) session.getAttribute("status");
status.setPBytesRead(pBytesRead);
status.setPContentLength(pContentLength);
status.setPItems(pItems);
}
}
然后在上傳得servlet或action中加入這樣一段代碼,就可以把自定義的progressListener添加進(jìn)去

代碼
myProgressListener getBarListener = new myProgressListener(req);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setProgressListener(getBarListener);
最后就是通過js來不斷的訪問另一個(gè)servlet來實(shí)時(shí)返回上傳狀態(tài)就可以了,限于篇幅我就不再貼代碼了,有興趣的讀者可以自己下載來看。
代碼下載(目標(biāo)另存為就行了)

--------------------------
09博客園紀(jì)念T恤新聞:
網(wǎng)速調(diào)查報(bào)告:韓國互聯(lián)網(wǎng)網(wǎng)速全球居首網(wǎng)站導(dǎo)航:
博客園首頁 個(gè)人主頁 新聞 社區(qū) 博問 閃存 找找看文章來源:
http://www.cnblogs.com/xiaoao808/archive/2009/08/03/1537870.html
http://family168.com/oa/springsecurity/html/index.html
package lc.util;
import java.math.BigDecimal;
public class MathHelper {
private static final int DEF_DIV_SCALE = 10;
private MathHelper() {
}
/**
* 提供精確的加法運(yùn)算。
*
* @param v1
* 被加數(shù)
* @param v2
* 加數(shù)
* @return 兩個(gè)參數(shù)的和
*/
public static double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
/**
* 提供精確的減法運(yùn)算。
*
* @param v1
* 被減數(shù)
* @param v2
* 減數(shù)
* @return 兩個(gè)參數(shù)的差
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供精確的乘法運(yùn)算。
*
* @param v1
* 被乘數(shù)
* @param v2
* 乘數(shù)
* @return 兩個(gè)參數(shù)的積
*/
public static double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
* 提供(相對(duì))精確的除法運(yùn)算,當(dāng)發(fā)生除不盡的情況時(shí),精確到 小數(shù)點(diǎn)以后10位,以后的數(shù)字四舍五入。
*
* @param v1
* 被除數(shù)
* @param v2
* 除數(shù)
* @return 兩個(gè)參數(shù)的商
*/
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}
/**
* 提供(相對(duì))精確的除法運(yùn)算。當(dāng)發(fā)生除不盡的情況時(shí),由scale參數(shù)指 定精度,以后的數(shù)字四舍五入。
*
* @param v1
* 被除數(shù)
* @param v2
* 除數(shù)
* @param scale
* 表示表示需要精確到小數(shù)點(diǎn)以后幾位。
* @return 兩個(gè)參數(shù)的商
*/
public static double div(double v1, double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精確的小數(shù)位四舍五入處理。
*
* @param v
* 需要四舍五入的數(shù)字
* @param scale
* 小數(shù)點(diǎn)后保留幾位
* @return 四舍五入后的結(jié)果
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}

--------------------------
09博客園紀(jì)念T恤新聞:
王建宙臺(tái)灣布道TD:痛快,一起努力的感覺網(wǎng)站導(dǎo)航:
博客園首頁 個(gè)人主頁 新聞 社區(qū) 博問 閃存 找找看文章來源:
http://www.cnblogs.com/xiaoao808/archive/2009/05/20/1469589.html
import java.sql.*;
public class Access
{
public static void main(String args[])
{
try
{
String strurl="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=books.mdb";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection(strurl) ;
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from books");
if(rs.next())
{
System.out.println(rs.getString("簡介"));
}
}catch(Exception e)
{
System.out.println(e);
}
}
}

--------------------------
09博客園紀(jì)念T恤新聞:
微軟正式對(duì)Word禁售令提起上訴 稱法官不懂法網(wǎng)站導(dǎo)航:
博客園首頁 個(gè)人主頁 新聞 社區(qū) 博問 閃存 找找看文章來源:
http://www.cnblogs.com/xiaoao808/archive/2009/05/08/1452661.html
又一個(gè)新聞發(fā)布......比以前的更加人性化了,用到了Struts2、Struts2的JSON插件,前臺(tái)js用了Jquery庫,自己看吧。歡迎大家提出自己的寶貴意見。
關(guān)于顯示新聞的功能我還沒有找到一個(gè)合適的AJAX表現(xiàn)形式,所以還沒有完成,歡迎大家給我個(gè)建議
點(diǎn)擊下載源碼

--------------------------
09博客園紀(jì)念T恤新聞:
IBM 2009年北美裁員近1萬人網(wǎng)站導(dǎo)航:
博客園首頁 個(gè)人主頁 新聞 社區(qū) 博問 閃存 找找看文章來源:
http://www.cnblogs.com/xiaoao808/archive/2009/03/16/1413631.html
最近搞的一個(gè)通訊錄想要加一個(gè)Ajax的自動(dòng)完成功能,看起來功能雖小,可給用戶的體驗(yàn)會(huì)改進(jìn)不少。在一個(gè)介紹了幾十種java的Ajax框架的網(wǎng)頁里面,我找到了AjaxTags這個(gè)小東西,開始了我的第一次Ajax之旅。
從AjaxTags的官方網(wǎng)站上面http://ajaxtags.sourceforge.net/可以下載到其最新的版本,目前是AjaxTags1.3順便下載了一個(gè)官方的小例子看了看,確實(shí)很好阿,例子中使用Ajax完成了11種功能,然而我需要的是自動(dòng)完成(autocomplete)部分的代碼,所以重點(diǎn)研究這一部分
jsp頁面中,首先當(dāng)然是要添加AjaxTags的標(biāo)簽支持,需要如下語句
Code

<%@ taglib uri="http://ajaxtags.org/tags/ajax" prefix="ajax"%>
然后在頁面中加入如下的標(biāo)簽
Code

<ajax:autocomplete
source="model"//從控件"model"中獲得輸入的字符
target="make"//通過Ajax自動(dòng)完成控件"make"的內(nèi)容
baseUrl="${contextPath}/autocomplete.view"//Ajax執(zhí)行時(shí)調(diào)用的請(qǐng)求路徑
className="autocomplete"//css類名
indicator="indicator"
minimumCharacters="1"//Ajax執(zhí)行需要輸入的最小字符數(shù)
/>
在官方的例子中使用的是Servlet來完成Ajax,而對(duì)于使用struts就不適用了,后面說這個(gè)問題。
在 autocomplete.view對(duì)應(yīng)的Servlet類中需要建立xml來供頁面調(diào)取,代碼如下

Code
public class AutocompleteServlet extends BaseAjaxServlet {
public String getXmlContent(HttpServletRequest request, HttpServletResponse response)
throws Exception {
String model = request.getParameter("model");//從頁面獲取控件"model"的輸入值
CarService service = new CarService();
List<Car> list = service.getModelsByName(model);//調(diào)用CarService的方法獲得汽車的List
// Create xml schema
return new AjaxXmlBuilder().addItems(list, "model", "make",true).toString();//生成xml
}
}
其實(shí)還是很簡單的,接下來看CarService的代碼吧,重點(diǎn)其實(shí)只有一段,然后在下面顯示出自動(dòng)提示,于是可以把剛才的那個(gè)ajax標(biāo)簽修改如下

Code
public class CarService {
private static List<Car> cars = new ArrayList<Car>();
static {
cars.add(new Car("Ford", "Escape"));
cars.add(new Car("Ford", "Expedition"));
cars.add(new Car("Ford", "Explorer"));
cars.add(new Car("Ford", "Focus"));
cars.add(new Car("Ford", "Mustang"));
cars.add(new Car("Ford", "Thunderbird"));
cars.add(new Car("Honda", "Accord"));
cars.add(new Car("Honda", "Civic"));
cars.add(new Car("Honda", "Element"));
cars.add(new Car("Honda", "Ridgeline"));
cars.add(new Car("Mazda", "Mazda 3"));
cars.add(new Car("Mazda", "Mazda 6"));
cars.add(new Car("Mazda", "RX-8"));
}//其實(shí)把上面這個(gè)地方改為數(shù)據(jù)庫查詢就可以從數(shù)據(jù)庫中得到List來供頁面顯示
public CarService() {
super();
}
public List<Car> getModelsByMake(String make) {
.
}
public List<Car> getModelsByName(String name) {
..
}
public List<Car> getAllCars() {
return cars;
}
}
例子看完了,開始實(shí)際操作吧,在我的頁面中,需要通過一個(gè)名為"name"的文本框輸入要查詢的人的姓名

Code
<ajax:autocomplete
source="name"
target="name"
baseUrl="ajaxfinduser.do"
className="autocomplete"
indicator="indicator"
minimumCharacters="1"
/>
接下來是我的Action,在寫Action的時(shí)候,我以為只需要把原來Servlet繼承的BaseAjaxServlet改為BaseAjaxAction就可以了,可后來才發(fā)現(xiàn),jar包中根本就沒有BaseAjaxAction這個(gè)類,無語,去官方網(wǎng)站上看了后才知道,在1.2更新到1.3的時(shí)候,把對(duì)Struts的支持去掉了,如果想支持Struts的話需要建立自己的BaseAjaxAction
(Struts removed, to use it create your own BaseAjaxAction.java and implement BaseAjaxXmlAction then just call xml = AjaxActionHelper.invoke(this, request, response);)
下載了一份AjaxTags的源碼來看,原來AjaxActionHelper.invoke();這個(gè)方法需要調(diào)用Action中的getXmlContent方法來完成xml的寫入,那就好說了,代碼如下:

Code
package com.txl.action;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.ajaxtags.servlets.BaseAjaxXmlAction;
import org.ajaxtags.xml.AjaxXmlBuilder;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.ajaxtags.servlets.AjaxActionHelper;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.txl.service.AjaxFindUserService;
import com.vo.User;
public class AjaxFindUserAction extends Action implements BaseAjaxXmlAction {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException, Exception {
response.setCharacterEncoding("utf-8");
response.getOutputStream().print(new String(AjaxActionHelper.invoke(this, request, response).getBytes("UTF-8"),"ISO-8859-1"));//這里需要轉(zhuǎn)換編碼,不然無法支持中文查詢
response.getOutputStream().flush();
return null;
}
public String getXmlContent(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String realname = request.getParameter("name");
ApplicationContext ctx = WebApplicationContextUtils
.getRequiredWebApplicationContext(servlet.getServletContext());//用ssh時(shí)需要在這里引入spring的配置文件,不然會(huì)在調(diào)用dao的時(shí)候報(bào)空指針異常
AjaxFindUserService service = (AjaxFindUserService) ctx
.getBean("AjaxFindUserService");
List<User> list = service.getUsersByRealname(realname);
return new AjaxXmlBuilder()
.addItems(list, "realname", "realname", true).toString();
}
}
剩下工作就是在struts-config.xml中配置對(duì)應(yīng)的action,在spring中配置對(duì)應(yīng)的bean就ok拉

--------------------------
09博客園紀(jì)念T恤新聞:
Office 2010雙拳出擊加強(qiáng)反盜版網(wǎng)站導(dǎo)航:
博客園首頁 個(gè)人主頁 新聞 社區(qū) 博問 閃存 找找看文章來源:
http://www.cnblogs.com/xiaoao808/archive/2008/09/22/1295661.html
我一直有通宵下東西的習(xí)慣,可又不忍心讓筆記本下載完成后一直等到我睡醒,所以我經(jīng)常用迅雷給我們提供的下載完成后自動(dòng)關(guān)機(jī)這個(gè)功能。
然而現(xiàn)在迅雷運(yùn)行在了虛擬機(jī)里面,這就郁悶了,即使自動(dòng)關(guān)機(jī)也只能關(guān)掉一個(gè)虛擬機(jī)的進(jìn)程,無奈我想到可不可以用shell程序來監(jiān)測虛擬機(jī)的進(jìn)程,當(dāng)他關(guān)閉后就運(yùn)行關(guān)機(jī)的命令,經(jīng)過測試,果然成功了,具體代碼如下:

Code
#!/bin/bash
while [ `pidof -s $1` ]
do
sleep 2 #&& echo "ok"
done
date
echo "Done..shuting down in 60 seconds." && sleep 60
shutdown -h -P now
將代碼保存在shutdown.sh文件中
使用起來也很方便,用"ps ux"找到vbox運(yùn)行的進(jìn)程,將其對(duì)應(yīng)的time command值作為參數(shù)輸入進(jìn)來,例如我的是:
lichao 10659 91.7 52.0 1224284 1079860 ? Sl 21:49 11:01 /opt/VirtualBox-1.6.4/VirtualBox -comment winxp -startvm 5e04c66f-82f7-4df0-0f92-8b9113be6f2
則執(zhí)行上述腳本文件:
./ shutdown.sh /opt/VirtualBox-1.6.4/VirtualBox -comment winxp -startvm 5e04c66f-82f7-4df0-0f92-8b9113be6f2
監(jiān)測開始
當(dāng)虛擬機(jī)關(guān)機(jī)后命令行出現(xiàn)如下提示:
Done..shuting down in 60 seconds.
60秒后就會(huì)關(guān)機(jī)拉,如果你還不想關(guān)機(jī),可以Ctrl+Alt+C停止當(dāng)前任務(wù),再進(jìn)行其他操作,怎么樣,挺好使的

--------------------------
09博客園紀(jì)念T恤新聞:
中國聯(lián)通:國際通訊已恢復(fù)至震前水平網(wǎng)站導(dǎo)航:
博客園首頁 個(gè)人主頁 新聞 社區(qū) 博問 閃存 找找看文章來源:
http://www.cnblogs.com/xiaoao808/archive/2008/08/21/1273554.html