ページ更新: 2004-08-07 (土) (5094日前)

関連: Cygwin/cygserver, Cygwin/PostgreSQL

cygipcはSystemV IPC (Inter-Process Communication: プロセス間通信)を提供するソフトウェアである。 (Shared memory, Semaphore, Message passing)

cygipcは当初はCygUtils (2006-01-15 URL修正) にて配布された。 このときの実行ファイルの名称は ipc-daemon.exe

その後、cygipcパッケージ (cygipc 2.X)としてCygwinから配布されるようになった。 このときに実行ファイルの名前が ipc-daemon2.exe に変更された。

その後、cygwin 1.5.7 (2004.01.31 cygwin-1.5.7-1) では cygserver が提供された。 このため、従来 cygipc を使っていたソフトウェアは、徐々に cvserver を使うように書き換えられつつある。

本文書では、主にCygwinのサイトでパッケージとして配布されているもの(cygipcパッケージ)について述べる。 CygUtilsから配布されたものについては古いため、述べない。

(以上、2004-08-16 に追加。)

目次

[編集]

メモ #

[編集]

ipc-daemon2 (cygipc) をサービスから削除する (2004-06-12) #

(Cygwin/PostgreSQL/メモ#ipc-daemon2 (cygipc) をサービスから削除する より移動。2004-08-25)

この項では ipc-daemon2 をサービスから削除する方法を述べる。

ipc-daemon2 は usage を表示する機能はない。

$ ipc-daemon2 --help
(ここでなにも表示されない)

そこで、/usr/share/doc/Cygwin/cygipc-2.03.README (2.03 はバージョン番号なので任意)を見て、コマンドラインオプションを調べる。

最初に、ipc-daemon2 サービスを停止する。
(以下では Cygwin のコマンドを使っているが、別に Windows の GUI で停止しても良いし、Windows の net stop コマンドを使っても良いし、Windowsの sc(Service Controller)使っても良い)。

$ cygrunsrv -E ipc-daemon2

$ cygrunsrv -Q ipc-daemon2
Service ipc-daemon2 exists
Type                : Own Process
Current State       : Stopped
Controls Accepted   :

次に、サービスから削除する。

$ ipc-daemon2 --remove-as-service

$ cygrunsrv -Q ipc-daemon2
cygrunsrv: Error querying a service: OpenService:  Win32 error 1060:
指定されたサービスはインストールされたサービスとして存在しません。
[編集]

cygipc を使うパッケージ (2004-07-18) #

2004-07-19 時点では、setup.ini を見ると、ddd 3.3.9-1 が cygipc を使っている。

ところが、cygcheck で調べても cygipc を使っていないみたい。

$ cygcheck `which ddd`.exe | grep -i ipc
$

試しに、cygipc を uninstall しても ddd は起動できる。 setup.ini (setup.hint) の間違い?

[編集]

GraphicsMagick、ImageMagick が cygipc に依存 (2004-06-23) #

ImageMagick、GraphicsMagick が cygcygipc-2.dll を使うため、 再度インストールした。

(2004-08-07 補足 - 2004-08-07 時点で最新の GraphicsMagick 1.0.6-1、ImageMagick 6.0.3-1 は cygipc を使わない)

なお、setup.ini を確認したところ、cygipcを使うパッケージは次の6つ。

  • GraphicsMagick
  • libGraphicsMagick-devel
  • libGraphicsMagick0
  • ImageMagick
  • libMagick-devel
  • libMagick6
$ cygcheck -l GraphicsMagick | grep bin
/usr/bin/gm.exe

$ cygcheck -l ImageMagick | grep bin
/usr/bin/animate.exe
/usr/bin/composite.exe
/usr/bin/conjure.exe
/usr/bin/convert.exe
/usr/bin/display.exe
/usr/bin/identify.exe
/usr/bin/import.exe
/usr/bin/Magick++-config
/usr/bin/Magick-config
/usr/bin/mogrify.exe
/usr/bin/montage.exe

GraphicsMagick の gm.exe が使うDLLを調べると:

$ cygcheck `which gm.exe`
C:/cygwin/bin/gm.exe
  C:/cygwin/bin\cygGraphicsMagick-0.dll
    C:\cygwin\usr\X11R6\bin\cygX11-6.dll
      C:/cygwin/bin\cygwin1.dll
        C:\WINDOWS\System32\ADVAPI32.DLL
          C:\WINDOWS\System32\ntdll.dll
          C:\WINDOWS\System32\KERNEL32.dll
          C:\WINDOWS\System32\RPCRT4.dll
    C:\cygwin\usr\X11R6\bin\cygXext-6.dll
    C:\cygwin\usr\X11R6\bin\cygdpstk-1.dll
      C:\cygwin\usr\X11R6\bin\cygdps-1.dll
        C:\cygwin\usr\X11R6\bin\cygXt-6.dll
          C:\cygwin\usr\X11R6\bin\cygICE-6.dll
          C:\cygwin\usr\X11R6\bin\cygSM-6.dll
    C:/cygwin/bin\cygbz2-1.dll
Error: could not find cygcygipc-2.dll
    C:/cygwin/bin\cygfreetype-6.dll
      C:/cygwin/bin\cygz.dll
    C:/cygwin/bin\cygjbig1.dll
    C:/cygwin/bin\cygjpeg-62.dll
    C:/cygwin/bin\cygpng12.dll
    C:/cygwin/bin\cygtiff4.dll
    C:/cygwin/bin\cygxml2-2.dll
      C:/cygwin/bin\cygiconv-2.dll
    C:\WINDOWS\System32\GDI32.dll
      C:\WINDOWS\System32\USER32.dll

ImageMagick の convert.exe が使うDLLを調べると:

$ cygcheck `which convert`.exe
C:/cygwin/bin/convert.exe
  C:/cygwin/bin\cygMagick-6.dll
    C:\cygwin\usr\X11R6\bin\cygX11-6.dll
      C:/cygwin/bin\cygwin1.dll
        C:\WINDOWS\System32\ADVAPI32.DLL
          C:\WINDOWS\System32\ntdll.dll
          C:\WINDOWS\System32\KERNEL32.dll
          C:\WINDOWS\System32\RPCRT4.dll
    C:\cygwin\usr\X11R6\bin\cygXext-6.dll
    C:\cygwin\usr\X11R6\bin\cygdpstk-1.dll
      C:\cygwin\usr\X11R6\bin\cygdps-1.dll
        C:\cygwin\usr\X11R6\bin\cygXt-6.dll
          C:\cygwin\usr\X11R6\bin\cygICE-6.dll
          C:\cygwin\usr\X11R6\bin\cygSM-6.dll
    C:/cygwin/bin\cygbz2-1.dll
Error: could not find cygcygipc-2.dll
    C:/cygwin/bin\cygfreetype-6.dll
      C:/cygwin/bin\cygz.dll
    C:/cygwin/bin\cygjbig1.dll
    C:/cygwin/bin\cygjpeg-62.dll
    C:/cygwin/bin\cygpng12.dll
    C:/cygwin/bin\cygtiff4.dll
    C:/cygwin/bin\cygxml2-2.dll
      C:/cygwin/bin\cygiconv-2.dll
    C:\WINDOWS\System32\GDI32.dll
      C:\WINDOWS\System32\USER32.dll

setup.exe で cygipc をインストールし、該当のファイルが含まれるか確認。

$ cygcheck -l cygipc | grep cygcygipc
/usr/bin/cygcygipc-2.dll
[編集]

cygipcのアンインストール (2004-06-23) #

cygserver を使うプログラムをコンパイルする場合、cygipc をアンインストールする。 (ヘッダファイルの一部が入れ替えられるので)

その前に、cygipc パッケージの情報を調べておく。

$ cygcheck -cd cygipc
Cygwin Package Information
Package              Version
cygipc               2.03-2

$ cygcheck -l cygipc
/etc/postinstall/cygipc.sh
/etc/preremove/cygipc.sh
/usr/bin/cygcygipc-2.dll
/usr/bin/ipc-daemon2.exe
/usr/bin/ipcrmcygipc.exe
/usr/bin/ipcscygipc.exe
/usr/bin/ipctestcygipc.exe
/usr/bin/msgtoolcygipc.exe
/usr/bin/semstatcygipc.exe
/usr/bin/semtoolcygipc.exe
/usr/bin/shmtoolcygipc.exe
/usr/include/cygipc/sys/ipc.h
/usr/include/cygipc/sys/ipctrace.h
/usr/include/cygipc/sys/msg.h
/usr/include/cygipc/sys/sem.h
/usr/include/cygipc/sys/shm.h
/usr/lib/libcygipc.a
/usr/lib/libcygipc.dll.a
/usr/share/doc/cygipc-2.03/BRANCHES
/usr/share/doc/cygipc-2.03/contents_motif.gif
/usr/share/doc/cygipc-2.03/COPYING
/usr/share/doc/cygipc-2.03/index.html
/usr/share/doc/cygipc-2.03/NEWS
/usr/share/doc/cygipc-2.03/next_motif.gif
/usr/share/doc/cygipc-2.03/node21.html
 : (略)
/usr/share/doc/cygipc-2.03/node81.html
/usr/share/doc/cygipc-2.03/previous_motif.gif
/usr/share/doc/cygipc-2.03/README
/usr/share/doc/cygipc-2.03/README.old
/usr/share/doc/cygipc-2.03/TODO
/usr/share/doc/cygipc-2.03/up_motif.gif
/usr/share/doc/cygipc-2.03/USAGE
/usr/share/doc/Cygwin/cygipc-2.03.README
/usr/share/man/man8/ipcrmcygipc.8
/usr/share/man/man8/ipcscygipc.8

setup.exe を起動して、cygipc を Uninstall する。

削除されたかどうか、確認する。

$ cygcheck -c cygipc
Cygwin Package Information
Package              Version        Status

$ cygcheck -l cygipc

ついでに、postinstall, preremove の処理内容も確認する。

/etc/postinstall/cygipc.sh.done

#!/bin/sh
prefix=/usr
if [ ! -d ${prefix}/include/sys ] ; then
  mkdir -p ${prefix}/include/sys
fi
for fn in ipc.h  ipctrace.h  msg.h  sem.h  shm.h ; do
  if [ ! -e ${prefix}/include/sys/${fn} ] ; then
    (cd ${prefix}/include/sys ; ln -fs ../cygipc/sys/${fn} ${fn})
  fi
done

/etc/preremove/cygipc.sh.done

#!/bin/sh
prefix=/usr
for fn in ipc.h  ipctrace.h  msg.h  sem.h  shm.h ; do
  if [ -L ${prefix}/include/sys/${fn} ] ; then
    rm -f ${prefix}/include/sys/${fn}
  fi
done

これらの ヘッダファイルは cygwin パッケージのものが使われる。

cygwin パッケージを確認。

$ cygcheck -l cygwin | egrep 'ipc.h|ipctrace.h|msg.h|sem.h|shm.h'
/usr/include/cygwin/ipc.h
/usr/include/cygwin/msg.h
/usr/include/cygwin/sem.h
/usr/include/cygwin/shm.h
/usr/include/sys/ipc.h
/usr/include/sys/msg.h
/usr/include/sys/sem.h
/usr/include/sys/shm.h
[編集]

cygipcパッケージに含まれる実行ファイル #

$ cygcheck -l cygipc | grep bin
/usr/bin/cygcygipc-2.dll
/usr/bin/ipc-daemon2.exe
/usr/bin/ipcrmcygipc.exe
/usr/bin/ipcscygipc.exe
/usr/bin/ipctestcygipc.exe
/usr/bin/msgtoolcygipc.exe
/usr/bin/semstatcygipc.exe
/usr/bin/semtoolcygipc.exe
/usr/bin/shmtoolcygipc.exe
[編集]

Cygwin で IPCに関係しそうな実行ファイル #

$ \ls -1 /usr/bin/ipc* /usr/bin/sem* /usr/bin/shm*
/usr/bin/ipc-daemon2.exe
/usr/bin/ipcclean
/usr/bin/ipck
/usr/bin/ipckcygipc
/usr/bin/ipcrm.exe
/usr/bin/ipcrmcygipc.exe
/usr/bin/ipcs.exe
/usr/bin/ipcscygipc.exe
/usr/bin/ipctestcygipc.exe
/usr/bin/semstat.exe
/usr/bin/semstatcygipc.exe
/usr/bin/semtool.exe
/usr/bin/semtoolcygipc.exe
/usr/bin/shmtool.exe
/usr/bin/shmtoolcygipc.exe
[編集]

Cygwin で IPCに関係しそうな実行ファイルを含むパッケージ #

$ cygcheck -f /usr/bin/ipc* /usr/bin/sem* /usr/bin/shm* | sort -u
cygipc-2.03-2
cygutils-1.2.5-1
cygwin-1.5.9-1
postgresql-7.4.1-3
$ cygcheck -l cygutils | grep bin
/usr/bin/ascii.exe
/usr/bin/banner.exe
/usr/bin/cal.exe
/usr/bin/col.exe
/usr/bin/colcrt.exe
/usr/bin/colrm.exe
/usr/bin/column.exe
/usr/bin/conv.exe
/usr/bin/cygstart.exe
/usr/bin/d2u.exe
/usr/bin/ddate.exe
/usr/bin/dos2unix.exe
/usr/bin/dump.exe
/usr/bin/getclip.exe
/usr/bin/getopt.exe
/usr/bin/ipck
/usr/bin/ipckcygipc
/usr/bin/lpr.exe
/usr/bin/mcookie.exe
/usr/bin/mkshortcut.exe
/usr/bin/msgtool.exe
/usr/bin/namei.exe
/usr/bin/putclip.exe
/usr/bin/readlink.exe
/usr/bin/readshortcut.exe
/usr/bin/realpath.exe
/usr/bin/rev.exe
/usr/bin/semstat.exe
/usr/bin/semtool.exe
/usr/bin/shmtool.exe
/usr/bin/u2d.exe
/usr/bin/unix2dos.exe
$ cygcheck -f /usr/bin/ipcclean
postgresql-7.4.1-3

$ file /usr/bin/ipcclean
/usr/bin/ipcclean: Bourne shell script text executable

ipcclean

PostgreSQL 7.4 Documentation (ipcclean)

[編集]

文書 #

[編集]

/usr/share/doc/cygipc-2.03/NEWS #

cygipc-2.03-2の付属文書より、抜粋:

Version v2_03:
1. Make cygipc coexist more peacefully with new cygserver implementation.
2. Add semstat, semtool, shmtool, msgtool, ipcs, and ipcrm back to cygipc distribution. Official package will rename these files via packaging script so that they don't clash with the cygserver-based ones from cygwin and cygutils.

[編集]

/usr/share/doc/Cygwin/cygipc-2.03.README #

cygipc-2.03-2のREADMEより抜粋:

CygIPC has been deprecated. It still works, it is still supported (as much as it ever has been) but you are STRONGLY encouraged to migrate to the new, and much better, cygserver implementation which is provided as part of cygwin as of Cygwin Kernel Version 1.5.7.

Known Issues:
1) If shutting down and restarting ipc-daemon2 under DIFFERENT users, you must "clean out" the IPC files in /tmp. These include:
/tmp/MultiFileMsg2
/tmp/MultiFileSem2
/tmp/MultiFileShm2
/tmp/cygipc2_*

(2004-08-07 和訳)
CygIPC は推奨されなくなりました。 それはまだ動作しますし、まだサポートされています(これまでと同じくらい)が、 より新しく、よりよい cygserver への移行を強く奨励されます。
cygserver は cygwin の一部として、Cygwin カーネルバージョン 1.5.7 以後で提供されています。