首页 › 日存档 › 2009年10月12日

Linux中Screen的用法

开启Screen
screen -UR
新建Screen
ctrl+a +c
进入下一个screen
ctrl+a +n
进入上一个screen
ctrl+a ?+q
关闭一个screen
ctrl+a ?+k
linux下screen命令的使用
系统管理员经常需要远程登录服务器
然后在服务器上跑一些程序
有个时候
得跑很长时间(超过12小时)
这是如果程序没结束就退出远程管理终端
远程跑的程序很有可能就此当掉
以前常用的解决方式是用命令nohup
但是nohup也有很多的问题
当有了screen
这一切便都迎刃而解了
敲入命令screen
会创建一个跑着shell的单一窗口
在这里面
你可以跑你所需要的程序
然后Ctrl+a d退出刚创建的窗口(回到进入screen前的环境)
然后再敲入命令screen创建新的终端窗口
就这样
你可以建立多个有shell的窗口(这些窗口里都可以跑你自己的应用)
这样就是你退出远程管理窗口(进入screen的环境)
你的screen窗间的窗口都不会关闭
里面跑得应用自然也不会当掉
用screen -ls可以看所有的screen sessions
用screen -r sessionid可以进sessionid指定的特定的screen session
最后
screen session不再使用的时候
screen -r sessionid进去
exit退出即可
Unix/Linux 工具: Screen 命令使用
screen使用
使用screen非常简易.只需在SHELL键入screen,便可打开一个screen session。
而在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。现在让我来简单介绍基本的命令C-a c -> Create,开启新的 window
C-a n -> Next,切换到下个 window
C-a p -> Previous,前一个 window
more..
less.. C-a C-a -> Other,在两个 window 间切换
C-a w -> Windows,列出已开启的 windows 有那些
C-a 0 -> 切换到第 0 个 window
C-a 1..9 -> 切换到第 1..9 个windowC-a a -> 发出 C-a,在 emacs, ve, bash, tcsh 下可移到行首C-a t -> Time,显示当前时间,和系统的 load
C-a K(大写) -> kill window,强行关闭当前的 windowC-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、
复制就像用使用 vi 一样C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上C-a ? -> Help,显示简单说明C-a d -> detach,将目前的 screen session (可能含有多个 windows)
丢到后台执行 当按了 C-a d 把 screen session detach 掉后,会回到还没进 screen 时的状态,此时在 screen session 里每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。下次 login 进来时:screen -ls -> 显示所有的 screen sessions
screen -r [keyword] -> 选择一个screen session 恢复对话若 screen -ls 里有 Attached sessions:
screen -d [keyword] -> 强制 detach,以便「接手」过来 实例
说明看了那么多,让我们用一个实际例子来结束我们今天的学习。在我们开启一个screen后,然后使用joe编辑一个文件,之后因为临时需要离开这时就可以运行Ctrl+a d,显示如下:[becks@ec-base becks]$ screen
[detached]这个时候当我们运行ps -e 可以看到pts/2这个我刚刚运行的screen正在运行joe
6264 pts/2 00:00:00 bash
6354 pts/2 00:00:00 joe而当我们回来后想恢复这个session,只需要键入screen -r,而当你有多个session时候,系统将提示你选择一个,如下:
[becks@ec-base becks]$ screen -r
There are several suitable screens on:
6263.pts-1.ec-base (Detached)
6382.pts-1.ec-base (Detached)
Type “screen [-d] -r [pid.]tty.host” to resume one of them.输入该session的pid进行恢复
[becks@becks becks]$ screen -r 6263想退出screen的session,和退出shell一样,只需要键入exit命令,成功退出后将有以下提示
[screen is terminating]


系统管理员经常需要远程登录服务器

然后在服务器上跑一些程序

有个时候

得跑很长时间(超过12小时)

这是如果程序没结束就退出远程管理终端

远程跑的程序很有可能就此当掉

以前常用的解决方式是用命令nohup

但是nohup也有很多的问题

当有了screen

这一切便都迎刃而解了

继续阅读 »

Php中foreach的用法详解

1.foreach()有两种用法:
foreach(array_name as $value)
{ ? ? ? statement; ? ?}
这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$value,并且数组内部的下标向下移一步,也就是下次循环回得到下一个元素。
foreach(array_name as $key => $value)
{ ? ? ? ?statement; ? ? ?}
这里跟第一种方法的区别就是多了个$key,也就是除了把当前元素的值赋给$value外,当前元素的键值也会在每次循环中被赋给变量$key。键值可以是下标值,也可以是字符串。比如book[0]=1中的“0”,book[id]=”001″中的“id”.
2. foreach概括:
这只是一种遍历数组简便方法。foreach 仅能用于数组,自PHP 5 起,还可能遍历对象。 当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。
用户可能注意到了以下的代码功能完全相同:
<?php
$arr = array(“one”, “two”, “three”);
reset($arr);
while (list(, $value) = each($arr)) {
echo “Value: $value<br>n”;
}
foreach ($arr as $value) {
echo “Value: $value<br />n”;
}
?>
以下代码功能也完全相同:
<?php
$arr = array(“one”, “two”, “three”);
reset($arr);
while (list($key, $value) = each($arr)) {
echo “Key: $key; Value: $value<br />n”;
}
foreach ($arr as $key => $value) {
echo “Key: $key; Value: $value<br />n”;
}
?>
示范用法的更多例子:
<?php
/* foreach example 1: value only */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo “Current value of $a: $v.n”;
}
/* foreach example 2: value (with key printed for illustration) */
$a = array(1, 2, 3, 17);
$i = 0; /* for illustrative purposes only */
foreach ($a as $v) {
echo “$a[$i] => $v.n”;
$i++;
}
/* foreach example 3: key and value */
$a = array(
“one” => 1,
“two” => 2,
“three” => 3,
“seventeen” => 17
);
foreach ($a as $k => $v) {
echo “$a[$k] => $v.n”;
}
/* foreach example 4: multi-dimensional arrays */
$a = array();
$a[0][0] = “a”;
$a[0][1] = “b”;
$a[1][0] = “y”;
$a[1][1] = “z”;
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo “$v2n”;
}
}
/* foreach example 5: dynamic arrays */
foreach (array(1, 2, 3, 4, 5) as $v) {
echo “$vn”;
}
?>
3.其他
reset — 将数组的内部指针指向第一个单元
reset() 将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值,如果数组为空则返回 FALSE。
current — 返回数组中的当前单元
每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元。 current() 函数返回当前被内部指针指向的数组单元的值,并不移动指针。如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。
each — 返回数组中当前的键/值对并将数组指针向前移动一步
返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为 0,1,key 和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。 如果内部指针越过了数组的末端,则 each() 返回 FALSE。
end — 将数组的内部指针指向最后一个单元
end() 将 array 的内部指针移动到最后一个单元并返回其值。
next — 将数组中的内部指针向前移动一位
返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE。next() 和 current() 的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。如果移动指针的结果是超出了数组单元的末端,则 next() 返回 FALSE。如果数组包含空的单元,或者单元的值是 0 则本函数碰到这些单元也返回 FALSE。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。
prev — 将数组的内部指针倒回一位
返回数组内部指针指向的前一个单元的值,或当没有更多单元时返回 FALSE。 如果数组包含空的单元,或者单元的值是 0 则本函数碰到这些单元也返回 FALSE。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。

1.foreach()有两种用法:

foreach(array_name as $value)

{ ? ? ? statement; ? ?}

这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$value,并且数组内部的下标向下移一步,也就是下次循环回得到下一个元素。

foreach(array_name as $key => $value)

{ ? ? ? ?statement; ? ? ?}

这里跟第一种方法的区别就是多了个$key,也就是除了把当前元素的值赋给$value外,当前元素的键值也会在每次循环中被赋给变量$key。键值可以是下标值,也可以是字符串。比如book[0]=1中的“0”,book[id]=”001″中的“id”.

继续阅读 »