cygserverシャットダウン
1) postgresの実行中の情報表示
psコマンドで実行中のプロセスの情報を表示できますが、その中からpostgresの情報のみを表示するには下のようにパイプを使って、psの標準出力をgrepの標準入力とします。postgersが実行中の場合は下のように表示され、続いて終了コードを表示すると0になっています。(grepの終了コードです。)postgresが実行中でないと終了コードは1になっています。
Owner@FMIL002 ~/bin
$ ps | grep postgres
4048 1 3744 1528 con 1003 00:09:56 /usr/sbin/postgres
2168 4048 3744 2168 con 1003 00:09:58 /usr/sbin/postgres
1656 4048 3744 1656 con 1003 00:09:58 /usr/sbin/postgres
716 1656 3744 716 con 1003 00:09:58 /usr/sbin/postgres

Owner@FMIL002 ~/bin
$ echo $?
0
ps | grep postgres の終了コードが0の場合は、postgresが実行中と判断できるのでpostgresを終了させるコマンドを実行するようにプログラを作成します。(実行中で無い場合でも終了コマンドを入力しても問題ないのですが。)
2) cygserverの実行中の情報表示
同様にcygserverが実行されているか確認します。
Owner@FMIL002 ~/bin
$ ps | grep cygserver
3508 1616 3508 3252 con 1003 00:08:53 /usr/sbin/cygserver

3) cygserverのPIDの表示
cygserverを終了させるためにはcygserverのPIDをkillの引数に指定しないといけません。PIDを下のように取得します。3個コマンドを連結して最終的にPID(=3508)を取得します。「-c6-9」は桁位置です。これは自分で数えます。左端は1です。下はXPの場合です。98だとPIDの桁数が異なるので「-c6-9」部分は別の値になります。
Owner@FMIL002 ~/bin
$ ps | grep cygserver | cut -c6-9
3508

4) シェルスクリプト
実際のシェルスクリプトは下になります。binの中に、killcygserver.shのファイル名で作成します。
#!/usr/bin/bash

ps | grep postgres

if [ $? = 0 ]
then
	/usr/sbin/pg_ctl stop
else
	echo 'postgres not found'
fi

ps | grep cygserver

if [ $? = 0 ]
then
	kill `ps | grep cygserver | cut -c6-9`
else
	echo 'cygserver not found'
fi

exit 0
        

1行目の「#!/usr/bin/bash」はこのスクリプトをbashに実行させることを指示するものです。bashが新しく起動されこのスクリプトを実行します。bashの代わりにcshやperlなどと記述するとcshまたはperlが起動されこのスクリプトを実行します。(スクリプトの仕様がbashとことなるのでエラーとなりますが。)postgresまたはcygserverが実行中でないと「not found」のメッセージが表示されます。「kill `ps | grep cygserver | cut -c6-9`」は、「ps | grep cygserver | cut -c6-9」を逆引用符「`」でくくることで「ps | grep cygserver | cut -c6-9」の実行結果を「kill」コマンドに取り込んでいます。最後の「exit 0」で終了コード0で終了します。

5) 実行権限を与える
シェルスクリプトを作成しても実行権限がありません。chmodコマンドで実行権限のあるファイルにします。
$ ls -l killcygserver.sh
-rw-r--r-- 1 Owner なし 239 Dec 5 00:56 killcygserver.sh

Owner@FMIL002 ~/bin
$ chmod 744 killcygserver.sh

Owner@FMIL002 ~/bin
$ ls -l killcygserver.sh
-rwxr--r-- 1 Owner なし 239 Dec 5 00:56 killcygserver.sh
chmodはファイルのアクセスモードを設定します。初めモードが「rw-r--r--」であったものが「rwxr--r--」に変わっています。3桁目(左端から4桁目)に「x」が表示されているファイルは自分(オーナー)で実行できます。左端から2桁目〜10桁目の9桁がアクセスモードを表しています。9桁の左から3桁がオーナー、真ん中の3桁がグループ、右の3桁がその他のユーザーのアクセスモードを表します。3桁の左端の桁はリード権限、真ん中の桁はライト権限、右端は実行権限を現します。7は3桁が全てオンであることを意味します。
6) 実行
作成したシェルスクリプトを実行して、psコマンドでpostgres、cygserverが終了されているか確認します。
Owner@FMIL002 ~/bin
$ killcygserver.sh
4048 1 3744 1528 con 1003 00:09:56 /usr/sbin/postgres
2168 4048 3744 2168 con 1003 00:09:58 /usr/sbin/postgres
1656 4048 3744 1656 con 1003 00:09:58 /usr/sbin/postgres
716 1656 3744 716 con 1003 00:09:58 /usr/sbin/postgres
waiting for postmaster to shut down.... done
postmaster stopped
3508 1616 3508 3252 con 1003 00:08:53 /usr/sbin/cygserver

Owner@FMIL002 ~/bin
$ cygserver: Shutdown finished.

[1]+ Done /usr/sbin/cygserver

Owner@FMIL002 ~/bin
$ ps
PID PPID PGID WINPID TTY UID STIME COMMAND
1616 1 1616 1616 con 1003 12:35:12 /usr/bin/bash
3900 1616 3900 2424 con 1003 01:10:51 /usr/bin/ps

Owner@FMIL002 ~/bin
7) alias(別名)
/home/Owner/.bashrc に下の行を追加すると次回cygwinを起動後。end_cserverと入力するとkillcygserver.shが実行されます。
alias end_cserver=/home/Owner/bin/killcygserver.sh

5節  シェルスクリプト cygserverシャットダウン 5節  シェルスクリプト
cygserverをシャットダウンする手順は、まず、postgresを「/usr/sbin/pg_ctl stop」と入力して終了します。次にpsコマンドでcygserverのPIDを表示させて「kill PID」と入力して終了させます。この手順を実行してくれるシェルスクリプトを作成します。