新聞中心
在Linux系統(tǒng)下,進(jìn)程的運(yùn)行時(shí)間往往不能無(wú)限期地延續(xù),因?yàn)檫M(jìn)程消耗的資源會(huì)導(dǎo)致系統(tǒng)運(yùn)行變得緩慢或失去響應(yīng)。為了避免這種情況的發(fā)生,一種有效的方式是控制進(jìn)程的超時(shí)時(shí)間。本文將介紹在Linux系統(tǒng)下如何控制進(jìn)程的超時(shí)時(shí)間。

1. timeout命令
timeout命令是一種簡(jiǎn)單易用的方法,可以在Linux系統(tǒng)下為進(jìn)程設(shè)置超時(shí)時(shí)間。timeout命令的基本語(yǔ)法是:
timeout [-s SIGNAL] TIMEOUT COMMAND [ARGUMENTS…]
其中,-s SIGNAL選項(xiàng)是可選的,用于指定在超時(shí)后發(fā)送的信號(hào)類型。TIMEOUT參數(shù)指定進(jìn)程的超時(shí)時(shí)間,單位是秒。COMMAND和ARGUMENTS表示需要執(zhí)行的命令和參數(shù)。
比如,我們可以用timeout命令在進(jìn)程ping百度超過(guò)10秒后自動(dòng)結(jié)束進(jìn)程,命令如下:
timeout 10s ping www.bdu.com
2. ulimit命令
ulimit命令是Linux系統(tǒng)提供的一種控制資源限制的工具。使用這個(gè)命令可以限制進(jìn)程的更大占用資源數(shù)。其中,用于控制進(jìn)程超時(shí)時(shí)間的參數(shù)是-u,表示設(shè)置進(jìn)程所允許的更大CPU使用時(shí)間,單位為秒。ulimit命令的基本語(yǔ)法是:
ulimit [-SHacdflmnpstuv] [LIMIT]
其中,-S和-H選項(xiàng)用于設(shè)置soft和hard限制,-a選項(xiàng)可以顯示所有的限制。其他選項(xiàng)意義如下:-c: core 文件大小的限制;-d: 進(jìn)程數(shù)據(jù)段的大??;-f: 文件的大??;-l: 鎖住內(nèi)存的大小;-m: 虛擬內(nèi)存的大小;-n: 可以同時(shí)打開的文件的數(shù)量;-p: 每個(gè)進(jìn)程可以打開的文件的數(shù)量;-s: 棧大??;-t: CPU 時(shí)間的限制;-u: 進(jìn)程的更大用戶進(jìn)程數(shù)目;-v: 虛擬存儲(chǔ)器的大小。
比如,我們可以使用ulimit命令限制進(jìn)程所允許的更大CPU使用時(shí)間為10秒,命令如下:
ulimit -t 10
然后可以通過(guò)執(zhí)行需要控制的命令來(lái)啟動(dòng)進(jìn)程。
3. timeout命令結(jié)合shell腳本
timeout命令可以結(jié)合shell腳本使用。通過(guò)編寫一個(gè)腳本,可以執(zhí)行一系列的命令,并在指定時(shí)間內(nèi)結(jié)束程序。腳本可以使用while語(yǔ)句來(lái)不斷地檢測(cè)進(jìn)程是否超時(shí),同時(shí)使用kill命令來(lái)結(jié)束進(jìn)程。下面是一個(gè)示例腳本:
#!/bin/bash
( command1 ; command2 ; … ; commandN ) &
sleep $Timeout
if kill -0 $! >/dev/null 2>&1
then
echo -e “\nProcess exceeded timeout”
kill -9 $!
fi
其中,$!表示最新進(jìn)程的PID。腳本中的命令1到命令N表示需要執(zhí)行的命令,由分號(hào)隔開。&符號(hào)表示把進(jìn)程后臺(tái)運(yùn)行。sleep $Timeout表示等待一段時(shí)間后檢查進(jìn)程是否超時(shí)。判斷進(jìn)程是否超時(shí),調(diào)用kill命令結(jié)束進(jìn)程。
4. Java語(yǔ)言中的超時(shí)控制
如果需要在Java程序中實(shí)現(xiàn)超時(shí)控制,可以使用Java自帶的Timer和TimerTask類。這兩個(gè)類可以協(xié)同工作,用來(lái)在指定的時(shí)間點(diǎn)執(zhí)行任務(wù)。下面是一個(gè)示例程序:
import java.util.Timer;
import java.util.TimerTask;
public class TimeoutTest {
public static void mn(String[] args) {
TimerTask task = new TimerTask() {
public void run() {
System.exit(0);
}
};
Timer timer = new Timer();
timer.schedule(task, 30000L);
}
}
以上程序中,TimeoutTest類實(shí)現(xiàn)了一個(gè)超時(shí)控制的示例,程序運(yùn)行后會(huì)在指定時(shí)間點(diǎn)退出。其中,TimerTask的run方法中調(diào)用了System.exit(0)方法來(lái)結(jié)束程序。
本文介紹了在Linux系統(tǒng)下控制進(jìn)程超時(shí)時(shí)間的四種方法:timeout命令、ulimit命令、timeout命令結(jié)合shell腳本、Java語(yǔ)言中的超時(shí)控制。分別針對(duì)不同的使用場(chǎng)景,這些方法都有各自的優(yōu)缺點(diǎn)。在實(shí)際使用中,可以根據(jù)具體的需求選擇最適合的方式來(lái)實(shí)現(xiàn)進(jìn)程超時(shí)控制。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
linux中mysql安裝完mysql啟動(dòng)時(shí),報(bào)如下錯(cuò)誤Timeout error occurred trying to start MySQL Daemon.
:46:21 Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.
解決辦法 在運(yùn)行初敗團(tuán)塵始化權(quán)限或宏表的時(shí)候使用增加參數(shù)–datadir ,命令格式為:察禪
shell> scripts/mysql_install_db –user=mysql –datadir=/usr/local/mysql/var
這樣問(wèn)題就解決了。
#addgroup mysql
#useradd -g mysql mysql
建立mysql組 添加mysql用戶到 mysql組
#chmod +x /etc/init.d/mysqld
#/etc/init.d/mysqld start
這個(gè)應(yīng)該知道吧
chown mysql:mysql (這里需要一個(gè)目標(biāo)文件),如:chown mysql:mysql /opt/mysql
1、看一下/etc中有沒有 my.cnf,如果沒有的話,在mysql的安裝目錄下的 support-files目錄中 選一個(gè)合適的my-xxxx.cnf文件 復(fù)制過(guò)去。
2、如核族果已經(jīng)有這個(gè)帆賀文件的話,多半改轎弊是權(quán)限問(wèn)題了。試試用root啟動(dòng)mysql
linux timeout的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux timeout,Linux Timeout:控制進(jìn)程超時(shí)時(shí)間的方式,linux中mysql安裝完mysql啟動(dòng)時(shí),報(bào)如下錯(cuò)誤Timeout error occurred trying to start MySQL Daemon.的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡(jiǎn)稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問(wèn)快、穩(wěn)定!
分享題目:LinuxTimeout:控制進(jìn)程超時(shí)時(shí)間的方式(linuxtimeout)
鏈接分享:http://fisionsoft.com.cn/article/dhehohh.html


咨詢
建站咨詢
