2008年11月29日星期六

进程管理

fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的
一。& 最经常被用到
这个用在一个命令的最后,可以把这个命令放到后台执行
二。ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停
三。jobs
查看当前有多少在后台运行的命令
四。fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五。bg
将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)


Linux下使用Shell命令控制任务Jobs执行
下列命令可以用来操纵进程任务:
  ps 列出系统中正在运行的进程;
  kill 发送信号给一个或多个进程(经常用来杀死一个进程);
  jobs 列出当前shell环境中已启动的任务状态,若未指定jobsid,则显示所有活动的任务状态信息;如果报告了一个任务的终止(即任务的状态被标记为Terminated),shell 从当前的shell环境已知的列表中删除任务的进程标识;
  bg 将进程搬到后台运行(Background);
  fg 将进程搬到前台运行(Foreground);

  将job转移到后台运行
  如果你经常在X图形下工作,你可能有这样的经历:通过终端命令运行一个GUI程序,GUI界面出来了,但是你的终端还停留在原地,你不能在shell中继续执行其他命令了,除非将GUI程序关掉。

  为了使程序执行后终端还能继续接受命令,你可以将进程移到后台运行,使用如下命令运行程序: #假设要运行xmms

  $xmms &

  这样打开xmms后,终端的提示又回来了。现在xmms在后台运行着呢;但万一你运行程序时忘记使用“&”了,又不想重新执行;你可以先使用ctrl+z挂起程序,然后敲入bg命令,这样程序就在后台继续运行了。

  概念:当前任务

  如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]”的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务。

  察看jobs
  使用jobs或ps命令可以察看正在执行的jobs。

  jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;

  进程的挂起

  后台进程的挂起:

  在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;

  在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;

  当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;

  前台进程的挂起:

  ctrl+Z;

  进程的终止

  后台进程的终止:
  方法一:
  通过jobs命令查看job号(假设为num),然后执行kill %num

  方法二:
  通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

  前台进程的终止:

  ctrl+c

  kill的其他作用
  kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。

  SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。

标签:

2008年9月27日星期六

ubuntu 乱码

最近Ubuntu 8.04修改了系统字体配置文件的构成,将原来的/etc/fonts/language-selector.conf分解成了四个文件,分别对应到 /etc/fonts/conf.d/下的29-language-selector-zh.conf、69-language-selector- zh-cn.conf、99-language-selector-zh.conf和CJK_aliases,而我们经常修改的sans字体渲染顺序在 69-language-selector-zh-cn.conf文件中,所以如果您发现系统字体显示不对,可以直接调整69-language- selector-zh-cn.conf,按照您喜欢的字体顺序调整好后,重启X后,系统的字体应该就恢复了。

但是这时候可能您的Flash里面的中文还是乱码或者和系统的字体不一致,这个的解决方法很简单,将/etc /fonts/conf.d/49-sansserif.conf删除即可,这个文件为在所有非sans-serif、serif字体中附加sans- serif,删除它后就Flash里面的字体配置就和外部系统的字体一致了。另外如果这样修改后还有乱码的话,试试调整下69-language- selector-zh-cn.conf里面的中文字体顺序。

2008年9月19日星期五

java IO 操作

package home.action;

import java.io.*;

public class Test {
public static void main(String[] args) throws IOException {
// 1.以行为单位从一个文件读取数据
BufferedReader in = new BufferedReader(new FileReader(
"/home/tiger/Desktop/Suse"));
String s, s2 = new String();
while ((s = in.readLine()) != null) {
s2 += s + "\n";
}
System.out.println(s2);
in.close();

// 1b. 接收键盘的输入
BufferedReader stdin = new BufferedReader(new InputStreamReader(
System.in));
System.out.println("Enter a line:");
System.out.println(stdin.readLine());

// 2. 从一个String对象中读取数据
StringReader in2 = new StringReader(s2);
int c;
while ((c = in2.read()) != -1) {
System.out.println((char) c);
}
in2.close();


// 3. 从内存取出格式化输入
try {
DataInputStream in3 = new DataInputStream(new ByteArrayInputStream(
s2.getBytes()));
while (true)
System.out.println((char) in3.readByte());
} catch (EOFException e) {
System.out.println("End of stream");
}

// 4. 输出到文件
try {
BufferedReader in4 = new BufferedReader(new StringReader(s2));
PrintWriter out1 = new PrintWriter(new BufferedWriter(
new FileWriter("F:\\nepalon\\ TestIO.out")));
int lineCount = 1;
while ((s = in4.readLine()) != null)
out1.println(lineCount++ + ":" + s);
out1.close();
in4.close();
} catch (EOFException ex) {
System.out.println("End of stream");
}

// 5. 数据的存储和恢复
try {
DataOutputStream out2 = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream(
"F:\\nepalon\\ Data.txt")));
out2.writeDouble(3.1415926);
out2.writeChars("\nThas was pi:writeChars\n");
out2.writeBytes("Thas was pi:writeByte\n");
out2.close();
DataInputStream in5 = new DataInputStream(new BufferedInputStream(
new FileInputStream("F:\\nepalon\\ Data.txt")));
BufferedReader in5br = new BufferedReader(
new InputStreamReader(in5));
System.out.println(in5.readDouble());
System.out.println(in5br.readLine());
System.out.println(in5br.readLine());
} catch (EOFException e) {
System.out.println("End of stream");
}
// 6. 通过RandomAccessFile操作文件
RandomAccessFile rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat",
"rw");
for (int i = 0; i < 10; i++)
rf.writeDouble(i * 1.414);
rf.close();
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");
for (int i = 0; i < 10; i++)
System.out.println("Value " + i + ":" + rf.readDouble());
rf.close();
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");
rf.seek(5 * 8);
rf.writeDouble(47.0001);
rf.close();
rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");
for (int i = 0; i < 10; i++)
System.out.println("Value " + i + ":" + rf.readDouble());
rf.close();
}
}

标签:

2008年9月16日星期二

Spring代理

自己写的一个spring代理的实例程序,应该还挺全面!
http://www.mediafire.com/?b1dw2nazwyi
点击下载,里面的注释写的很清楚

标签:

Spring代理 之 ProxyFactoryBean

  1. package home.dong.aop;
  2. import org.springframework.aop.framework.ProxyFactoryBean;
  3. import org.springframework.beans.factory.BeanFactory;
  4. import org.springframework.beans.factory.xml.XmlBeanFactory;
  5. import org.springframework.context.ApplicationContext;
  6. import org.springframework.context.support.ClassPathXmlApplicationContext;
  7. import org.springframework.core.io.ClassPathResource;
  8. import home.dong.advice.MyMethodBeforeAdvice;
  9. import home.dong.impl.Lion;
  10. import home.dong.impl.Tiger;
  11. import home.dong.inter.Animal;
  12. public class Spring_AOP {
  13.     public void proxy_A_Animal() throws ClassNotFoundException {
  14.         Lion lion = new Lion();
  15.         ProxyFactoryBean pfb = new ProxyFactoryBean();
  16.         pfb.setProxyTargetClass(true);
  17.         // 为true时 指定代理的是 类
  18.         // 而不是借口,此时使用的是CGLIB来实现代理,可以看到被代理的实体类的构造方法被调用*两次*
  19.         // 默认值为false
  20.         // pfb.setProxyInterfaces(new Class[]{Animal.class});
  21.         // 指定代理的是借口而非类,此时使用的是java来实现代理(java 代理必须指定借口)
  22.         /**
  23.          * 以上两个方法 setProxyTargetClass() setProxyInterfaces()
  24.          * 如果同时指定(既-----指定直接代理类,而又指定了代理的借口),则spring会优先选择java代理方式
  25.          * 
  26.          * 如果同时未指定,则spring会根据被代理类是否实现了某个借口而自动选择使用java代理还是CBLIB代理. 注意:
  27.          * 如果被代理对象实现了借口
  28.          * 既spring选择java代理,则在通过代理工厂得到对象实例时必须将得到的对象转换成被代理对象的借口类型,否则会转型错误抛出
  29.          * ClassCastException异常.
  30.          * 如果被代理对象没有实现任何借口,既spring选择CGLIB代理,则在通过代理工厂得到对象实例时必须将得到的对象直接转换成被代理对象的类型
  31.          * 
  32.          */
  33.         pfb.setTarget(lion);
  34.         pfb.addAdvice(new MyMethodBeforeAdvice());
  35.         // 使用java代理必须使用其借口来得到对象,否则会转型出错
  36.         // Animal obj = (Animal) pfb.getObject();
  37.         Lion ln = (Lion) pfb.getObject();
  38.         String str = ln._Fight("Tiger");
  39.         System.out.println(str);
  40.     }
  41.     public static void main(String[] args) throws ClassNotFoundException {
  42.          Spring_AOP aop = new Spring_AOP();
  43.          aop.proxy_A_Animal();
  44.     }
  45. }

标签:

Spring代理 之 ProxyFactory

  1. package home.dong.aop;
  2. import java.lang.reflect.Method;
  3. import home.dong.advice.MyMethodBeforeAdvice;
  4. import home.dong.impl.Tiger;
  5. import home.dong.inter.Animal;
  6. import org.aopalliance.aop.Advice;
  7. import org.springframework.aop.MethodBeforeAdvice;
  8. import org.springframework.aop.framework.ProxyFactory;
  9. import org.springframework.context.ApplicationContext;
  10. import org.springframework.context.support.ClassPathXmlApplicationContext;
  11. import org.springframework.aop.support.DefaultPointcutAdvisor;
  12. public class Spring_Base_AOP {
  13.     public void proxy_A_Animal_1() {
  14.         Tiger animal_Tiger = new Tiger();
  15.         ProxyFactory factory = new ProxyFactory();
  16.         factory.addAdvice(new MyMethodBeforeAdvice());
  17.         // 如果设置了接口
  18.         // factory.setInterfaces(new Class[]{Animal.class});
  19.         // 或
  20.         // factory.addInterface(Animal.class);
  21.         // 那么 ProxyFactory会 使用java 代理来实现 (使用java 代理必须设置接口---既代理目标对象所实现的接口 )
  22.         // 如果没有设置或添加接口 ProxyFactory 则会使用 CGLIB来实现代理
  23.         factory.setTarget(animal_Tiger);
  24.         Animal tiger = (Animal) factory.getProxy();
  25.         System.out.println(tiger._Fight("Lion"));
  26.     }
  27.     public static void main(String[] args) {
  28.         Spring_Base_AOP aop = new Spring_Base_AOP();
  29.         aop.proxy_A_Animal_1();
  30.     }
  31. }

标签:

Spring代理 之 java代理

  1. package home.dong.aop;

  2. import home.dong.impl.Lion;
  3. import home.dong.impl.Tiger;
  4. import home.dong.inter.Animal;
  5. import java.lang.reflect.InvocationHandler;
  6. import java.lang.reflect.Method;
  7. import java.lang.reflect.Proxy;
  8. import org.springframework.aop.framework.ProxyFactory;
  9. public class J2EE_Base_AOP {
  10.     /**
  11.      * java代理,要求代理目标必须时间某个接口,则在通过代理得到对象实例时必须将得到的对象转换成被代理对象的借口类型,否则会转型错误抛出
  12.      */

  13.     /**
  14.      * java代理 I 匿名内部类实现, 直接实现InvocationHandler接口
  15.      * @param tiger
  16.      */
  17.     public void proxy_A_Animal_1(final Tiger tiger) {
  18.         Animal animal = (Animal) Proxy.newProxyInstance(tiger.getClass()
  19.                 .getClassLoader(), tiger.getClass().getInterfaces(),
  20.                 new InvocationHandler() {
  21.                     public Object invoke(Object proxy, Method method,
  22.                             Object[] args) throws Throwable {
  23.                         System.out.println("我在这里代理了....... 下面要执行的方法是:  "
  24.                                 + method.getName());
  25.                         if (method.getName().equals("_Fight")) {
  26.                             System.out.println("fighting!!!!!!!!!!!!!!!!");
  27.                             System.out.println("对手是====" + args[0]);
  28.                         }
  29.                         return method.invoke(tiger, args);
  30.                     }
  31.                 });
  32.         System.out.println(animal._Drink("water"));
  33.         System.out.println(animal._Eat("meat"));
  34.         System.out.println(animal._Fight("Lion"));
  35.     }

  36.     /**
  37.      * java代理 II
  38.      */
  39.     public void proxy_A_Animal_2() {
  40.         // 实例化要被代理的类
  41.         Lion lion = new Lion();
  42.         Animal animal = (Animal) Proxy.newProxyInstance(Thread.currentThread()
  43.                 .getContextClassLoader(), lion.getClass().getInterfaces(),
  44.                 new MyInvocationHandler<Lion>(lion));
  45.         animal._Drink("Milk");
  46.         animal._Eat("Meat");
  47.         animal._Fight("Tiger");
  48.     }

  49.     // 内部类 实现InvocationHandler接口 对方法进行拦截
  50.     public class MyInvocationHandler<T> implements InvocationHandler {
  51.         private T targetClass;
  52.         MyInvocationHandler(T target) {
  53.             this.targetClass = target;
  54.         }

  55.         /**
  56.          * 调用代理目标的方法
  57.          * 
  58.          * @param proxy
  59.          *            代理实例
  60.          * @param mthod
  61.          *            代理目标的方法
  62.          * @param args
  63.          *            代理目标的方法参数
  64.          */
  65.         public Object invoke(Object proxy, Method method, Object[] args)
  66.                 throws Throwable {
  67.             System.out.println("这里进行真正的方法拦截--------拦截将要执行的方法");
  68.             System.out.println("=====================================");
  69.             System.out.println("要执行的方法是: "
  70.                     + method.getDeclaringClass().getName() + " 的 "
  71.                     + method.getName());
  72.             /*
  73.              * 注意:method.invoke(Object obj,Object... args)
  74.              * 方法中第一个参数不能传递proxy,否则会出现无限递归调用,应该传递实际的代理目标的实例
  75.              */
  76.             Object obj = method.invoke(targetClass, args);
  77.             System.out.println(obj.toString());
  78.             return obj;
  79.         }
  80.     }

  81.     public static void main(String[] args) {
  82.         J2EE_Base_AOP aop = new J2EE_Base_AOP();
  83.         aop.proxy_A_Animal_1(new Tiger());
  84.         System.out.println("\n\n\n");
  85.         aop.proxy_A_Animal_2();
  86.     }

  87. }

标签: