2009-04-20

プロセスの使用メモリを確認したい

 
プロセスの使用メモリを確認したい



ps alx

ps のオプション(一部のみ)
  • a : すべてのユーザが実行中のプロセスを表示する
  • l : 詳細を表示する
  • x : ユーザが実行せずに実行中のプロセスを表示する
ps の表示項目(一部のみ)
  • VSZ : 仮想メモリのサイズ
  • RSS : 使用中の物理メモリのサイズ


top -p pid [,pid ...]

top のオプション(一部のみ)
  • -p : PID を指定して監視する(20個まで?)
top の表示項目(一部のみ)
  • %CPU : CPU 使用率
  • %MEN : メモリ使用率
  • VIRT : タスクが使用中の仮想メモリのサイズ
  • SWAP : スワップされたサイズ
  • RES : タスクが使用中の物理メモリのサイズ(RES = VIRT - SWAP)



メモ
  • [ps] オプションが「l」と「-l」のときで表示される項目が異った
  • [ps] SystemV 系のオプションは異なるらしい
  • [top] 動的



環境
#cat /etc/redhat-release
CentOS release 5 (Final)




参考


 

ポート情報を確認したい

 
ポート情報を確認したい



netstat -anp

netstat のオプション(一部のみ)
  • a : すべてのソケットを表示する
  • l : listen しているソケットを表示する
  • n : 名前解決を行わない
  • p : ポートをオープンしたサービスの PID を表示する


lsof -i -n

lsof のオプション(一部のみ)
  • i : IPv[46] を表示する
  • n : 名前解決を行わない




メモ
nmap とかいうのをインストールしてみたらよいのかもしれない。



環境
#cat /etc/redhat-release
CentOS release 5 (Final)




参考

 

2009-04-15

Windows バッチファイル : 改行を出力したい


Windows バッチファイルで改行を出力したい

詳細
  • foo.txt に出力する



@echo off

echo;> foo.txt




メモ
@echo off

echo; > foo.txt

こう書くと「半角スペース+改行」になった。



環境
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

2009-04-09

Windows バッチファイル : テキストファイルからある文字列を検索したい


Windows バッチファイルでテキスト・ファイルから文字列を検索したい。

詳細
  • sample.txt に「foo boo」と一致する文字があるか検索する
  • 一致した文字列は出力しない
  • 一致した場合は「一致」、一致しなかった場合は「不一致」をコンソールに表示する



@echo off

FINDSTR /c:"foo boo" sample.txt > NUL
IF %ERRORLEVEL% EQU 0 (
   echo 一致
) ELSE (
   echo 不一致
)




環境
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.




参考

Windows バッチファイル : ファイルの内容を読み込みたい


Windows バッチファイルでファイルの内容を読み込みたい。
一行ずつ読み込んだデータをコンソールに出力してみる。



@echo off

FOR /F "delims=" %%a IN (sample.txt) DO (
   @ECHO %%a
)

※ delims オプションは区切り文字を設定
※ 既定の区切り文字はスペース(半角・全角)とタブ



下記を追加してみる。
詳細
  • sample.txt のデータは半角カンマ区切りで作成する
  • 各行の 1 番目と 3 番目のトークンを出力する



@echo off

FOR /F "tokens=1,3 delims=," %%a IN (sample.txt) DO (
   @ECHO %%a %%b
)

※ %a は for 文で明示的に宣言される
※ %b は takens オプションで暗黙的に宣言される



環境
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.



関連

任意の項目数の CSV ファイルの内容を読み込んで、その項目を処理する必要に迫られたので
 → Windows バッチファイル : 任意の項目数の CSV ファイルの内容を読み込みたい

2009-04-08

Windows バッチファイル : プログラムが正常終了したかどうかを判断したい


Windows バッチファイルで実行しているプログラムが正常終了したかどうかを判断したい。



@echo off

"C:\work\sample.exe"
IF %ERRORLEVEL% EQU 0 (
   echo OK
) ELSE (
   echo NG
)




とかやってみたけど C:\work\sample.exe が正常終了時に終了コードを「0」、異常終了時は「0 以外」とかを戻していないと意味がない。(正常・異常ともに終了コードが「0」だと判断できない)。



メモ
比較演算子
  • EQU - 等しい
  • NEQ - 等しくない
  • LSS - より小さい
  • LEQ - 以下
  • GTR - より大きい
  • GEQ - 以上




環境
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.




参考

Windows バッチファイル : 指定したファイルが存在しない場合は、処理を途中で終わりたい


Windows バッチファイルで指定したファイルが存在しない場合は、処理を途中で終わりたい。



@echo off

IF NOT EXIST "C:\work\sample.txt" (
    echo ファイルが存在しません.処理を終了します.
    GOTO :EOF
)

echo 後続の処理を続けます.

※ 「GOTO :EOF」はコマンド拡張機能


@echo off

IF NOT EXIST "C:\work\sample.txt" (
    GOTO :FILE_NOT_FOUND
)

echo 後続の処理を続けます.

GOTO :END

:FILE_NOT_FOUND
    echo ファイルが存在しません.処理を終了します.
    GOTO :END

:END




エラーメッセージをどこに記述するかだなぁ。



環境
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

2009-04-02

Java : JTable の特定の行の文字色を変えたい - 2


JTable の特定の行の文字色を変えたい

詳細
  • 特定の値(error フラグが true の場合)を含む行の文字色を赤色にしたい



import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class Sample extends JFrame {

    public Sample(List<SampleInfo> infoList) {
        SampleTable table = new SampleTable();
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        table.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 14));
        table.setData(infoList);
        JScrollPane sp = new JScrollPane(table);
        sp.setPreferredSize(new Dimension(500, 200));
        JPanel panel = new JPanel();
        panel.add(sp);
        getContentPane().add(panel);
    }

    public static void main(String[] args) {
        Sample frame = new Sample(createData());
        frame.setTitle("sample");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(60, 60, 600, 260);
        frame.setVisible(true);
    }

    private static List<SampleInfo> createData() {
        List<SampleInfo> list = new ArrayList<SampleInfo>();
        SampleInfo info = null;

        info = new SampleInfo();
        info.init("0", "a", true);
        list.add(info);
        info = new SampleInfo();
        info.init("1", "b", false);
        list.add(info);
        info = new SampleInfo();
        info.init("2", "c", false);
        list.add(info);
        info = new SampleInfo();
        info.init("3", "d", true);
        list.add(info);

        return list;
    }

    public class SampleTable extends JTable {

        private Map<String, SampleInfo> infoMap;

        public SampleTable() {
            super(new DefaultTableModel(new String[] { "key", "value" }, 0));
        }

        @Override
        public Component prepareRenderer(TableCellRenderer tcr, int row, int column) {
            Component c = super.prepareRenderer(tcr, row, column);
            String value = getValueAt(row, 0).toString();
            if (infoMap != null && !infoMap.isEmpty()) {
                SampleInfo info = infoMap.get(value);
                if (info.isError()) {
                    c.setForeground(Color.RED);
                } else {
                    c.setForeground(Color.BLACK);
                }
            } else {
                c.setForeground(Color.BLACK);
            }
            return c;
        }
        
        public void setData(List<SampleInfo> infoList) {
            if (infoList == null || infoList.isEmpty()) {
                return ;
            }

            DefaultTableModel model = (DefaultTableModel) getModel();
            if (model == null) {
                model = new DefaultTableModel();
            } else {
                for (int i=model.getRowCount()-1; i>-1; i--) {
                    model.removeRow(i);
                }
            }
            
            this.infoMap = new HashMap<String, SampleInfo>();
            for (SampleInfo info : infoList) {
                if (info != null) {
                    infoMap.put(info.getKey(), info);
                    model.addRow(info.getData());
                }
            }
        }

        public void clear() {
            DefaultTableModel model = (DefaultTableModel) getModel();
            if (model != null) {
                for (int i=model.getRowCount()-1; i>-1; i--) {
                    model.removeRow(i);
                }
            }
        }
    }

    public static class SampleInfo {

        private String key;
        private String value;
        private boolean error;

        public SampleInfo() {
        }

        public void init(String k, String v, boolean e) {
            this.key = k;
            this.value = v;
            this.error = e;
        }

        public String getKey() {
            return key;
        }
        public String getValue() {
            return value;
        }
        public boolean isError() {
            return error;
        }

        public Object[] getData() {
            List<Object> list = new ArrayList<Object>();
            list.add(createObject(key));
            list.add(createObject(value));
            return list.toArray();
        }

        private Object createObject(final String item) {
            return new Object() {
                @Override
                public String toString() {
                    return item;
                }
            };
        }
    }
}



前回 ので、特定のカラム(前回の場合は 6 カラム目(項目 F の列))を非表示にできればよかったのだけれども、提供されてる API でできるのかどうかもわからなかったので javax.swing.JTable クラスを拡張してみた。

どうだろか。SampleTable#setData(java.util.List) がなんだかどうにかならないものかと思ったり思わなかったり。まぁ、いいや。



環境
OS   : Windows XP Pro sp2
java : jdk1.6.0_11

Java : JTable の特定の行の文字色を変えたい - 1


JTable の特定の行の文字色を変えたい

詳細
  • 各行の 6 カラム目(項目 F の列)の値が“red”の場合、その行の文字色を赤色にしたい



import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class Sample extends JFrame {

  private String[] columnNames = { "A", "B", "C", "D", "E", "F" };

  private String[][] sampleData = {{ "a", "1", "い", "", "1234567890", "red"}
                                      , { "b", "2", "ろ", "", "4444444444", "0"}
                                      , { "c", "3", "は", "", "wwwwwwwwww", "0"}
                                      , { "d", "4", "に", "", "IIIIIIIIII", "red"}
                                  };

  public Sample() {
      JTable table = new JTable(sampleData, columnNames) {
          @Override
          public Component prepareRenderer(TableCellRenderer tcr, int row, int column) {
              Component c = super.prepareRenderer(tcr, row, column);
              if ("red".equals(getValueAt(row, 5))) {
                  c.setForeground(Color.RED);
              } else {
                  c.setForeground(getForeground());
              }
              return c;
          }
    
      };
      table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
      table.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 14));
      JScrollPane sp = new JScrollPane(table);
      sp.setPreferredSize(new Dimension(500, 200));
      JPanel panel = new JPanel();
      panel.add(sp);
      getContentPane().add(panel);
  }

  public static void main(String[] args) {
      Sample frame = new Sample();
      frame.setTitle("sample");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setBounds(60, 60, 600, 600);
      frame.setVisible(true);
  }
}

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class Sample extends JFrame {

  private String[] columnNames = { "A", "B", "C", "D", "E", "F" };

  private String[][] sampleData = {{ "a", "1", "い", "", "1234567890", "red"}
                                      , { "b", "2", "ろ", "", "4444444444", "0"}
                                      , { "c", "3", "は", "", "wwwwwwwwww", "0"}
                                      , { "d", "4", "に", "", "IIIIIIIIII", "red"}
                                  };

  public Sample() {
      JTable table = new JTable(sampleData, columnNames);
      table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
      table.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 14));
      table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
          @Override
          public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
              super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
              if ("red".equals(table.getValueAt(row, 5))) {
                  setForeground(Color.RED);
              } else {
                  setForeground(table.getForeground());
              }
              return this;
          }
      });
      JScrollPane sp = new JScrollPane(table);
      sp.setPreferredSize(new Dimension(500, 200));
      JPanel panel = new JPanel();
      panel.add(sp);
      getContentPane().add(panel);
  }

  public static void main(String[] args) {
      Sample frame = new Sample();
      frame.setTitle("sample");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setBounds(60, 60, 600, 600);
      frame.setVisible(true);
  }
}



微妙だ。
無名クラスでやるより、javax.swing.JTable クラスか javax.swing.table.DefaultTableCellRenderer クラスの拡張クラスを用意した方がよいのかもしれない。(多分、前者)。



参考

2009-04-01

Java : JTable のセルの幅を設定したい


JTable のセルの幅を設定したい。
※ 但し、表示後のサイズ変更は可としてみる



import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableColumnModel;

public class Sample extends JFrame {

    private String[] columnNames = { "A", "B", "C", "D", "E" };

    private String[][] sampleData = {{ "a", "1", "い", "", "1234567890"}
                                    , { "b", "2", "ろ", "", "4444444444"}
                                    , { "c", "3", "は", "", "wwwwwwwwww"}
                                    , { "d", "4", "に", "", "IIIIIIIIII"}};

    public Sample() {
        JTable table = new JTable(sampleData, columnNames);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        table.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 14));
        // ヘッダ
        DefaultTableColumnModel colHeaderModel = (DefaultTableColumnModel) table.getTableHeader().getColumnModel();
        for (int i=0; i<colHeaderModel.getColumnCount(); i++) {
            colHeaderModel.getColumn(i).setPreferredWidth(((i+1) * 30));        // ヘッダセルの幅を設定
        }
        // データ
        DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
        for (int i=0; i<colModel.getColumnCount(); i++) {
            colModel.getColumn(i).sizeWidthToFit();                             // ヘッダセルの幅に合うように設定
        }
        JScrollPane sp = new JScrollPane(table);
        sp.setPreferredSize(new Dimension(500, 200));
        JPanel panel = new JPanel();
        panel.add(sp);
        getContentPane().add(panel);
    }

    public static void main(String[] args) {
        Sample frame = new Sample();
        frame.setTitle("sample");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(60, 60, 600, 600);
        frame.setVisible(true);
    }
}