• ベストアンサー

二重起動チェックについて

Solarisで、プロセスの二重起動チェックを行いたい のですが、システムコールの使用など簡単に行える 方法はないでしょうか? よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.2

以下のようなプログラムでプロセス名が取得できます。 他にもプロセスに関する情報をとれるのでがんばってください。 /* #define SVR4_2_PROC */ /* for Solaris 2.6 */ #include #include #include #ifdef SVR4_2_PROC #include #else #include #endif #include #include #include int psinfo_of (pid, info) pid_t pid; #ifdef SVR4_2_PROC psinfo_t *info; #else prpsinfo_t *info; #endif { int fd; char fname[32]; #ifdef SVR4_2_PROC /* Solaris 2.6 */ sprintf (fname, "/proc/%d/psinfo", pid); if ((fd = open (fname, O_RDONLY)) < 0) return -1; if (read (fd, info, sizeof (psinfo_t)) < 0) { close (fd); return -1; } #else /* Solaris 2.5 */ sprintf (fname, "/proc/%05d", pid); if ((fd = open (fname, O_RDONLY)) < 0) return -1; if (ioctl (fd, PIOCPSINFO, info) < 0) { close (fd); return -1; } #endif close (fd); return 0; } int main (argc, argv) int argc; char *argv[]; { #ifdef SVR4_2_PROC psinfo_t info; #else prpsinfo_t info; #endif if (psinfo_of (getpid(), &info) < 0) exit (1); fprintf (stdout, "name:%s\n", info.pr_fname); exit(0); }

katsuboh
質問者

お礼

ありがとうございました。 動かしてみます。

その他の回答 (1)

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.1

samba,Netscape,canna等のメジャーなものは /tmp 等に起動時にファイルを作って、2重起動 のチェックに使っています。 っていう方法ではだめですか? 他にはSolaris 2.X からは /proc ファイルシステム がありますので proc をチェックすることでもチェック できますが、プログラムが複雑になるかな。

katsuboh
質問者

お礼

ご回答ありがとうございます。 起動時にファイルを作る方法は簡単で私も考えた方法 ですが、起動中はファイルが存在し、プロセス終了後 はファイルが存在しないという状態が保証されない ため、できれば他の方法がいいかなと思うのですが... procをチェックするというのは具体的にどうすること なのでしょうか? 教えて頂けると嬉しいです。

関連するQ&A

  • 二重起動チェックについて

    WindowsServer2003でターミナルサービスを使ってシステムを構築しています。 一応GetProcessesByNameを使用して二重起動チェックを行っていたのですが、この場合だと他のユーザーが別のPCから同じアプリケーションを起動した際に二重起動チェックに引っかかってしまいます。 ターミナルサービス上でユーザー毎にアプリケーションの二重起動チェックは出来ないのでしょうか。 開発言語はVB.NET2003です。 よろしくお願いします。

  • VB5.0 二重起動防止

    OSWin98/VB5.0を使用しています。同一のシステムの重複起動を防止したいのです。過去ログの、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=644390 を参照し、 http://www.vbvbvb.com/jp/gtips/1101/gCreateToolhelp32SnapshotTh32csSnapprocess.html のサンプルを参考にし、実行中のプロセスに同一のものがあれば、複数起動と判断するようにしました。 しかし、どうしても二重起動されてしまいます。 例1)A.exeを起動、A.vbpをデバッグで実行    →二重起動を検出し、後者は起動されない 例2)A.exeを起動、A.exeを起動    →二重起動が検出されず、後者も起動されてしまう App.PrevInstanceで判断できると思うのですが、例1と同じ方法でもこの場合は、二重起動を防ぐことができません。 他によい方法がある、ここがおかしいんじゃないの?等ありましたら、教えてください。 よろしくお願いします。

  • vb.net2003での二重起動防止について

    度々お世話になっています。 vb.net2003でアプリケーションを作りました。 そこで二重起動防止を行いたい為に、Process.GetProcessesByName メソッドを使用して行いました。 二重起動防止は出来ているのですが、ターミナルサービスでリモートデスクトップ接続を行い、同一ユーザーの二重起動防止はしたいですが、1ユーザーでも使用していたら 別ユーザーで起動できません。 何か良い方法はありませんでしょうか? 出来れば解説しているサイトがあれば教えて下さい。

  • 二重起動禁止について

    VB6から.NETへ移行してきました。 VB6の時システムの二重起動を禁止するのは、プロパティの値を見るだけでしたが、.NETでの方法がわかりません。 どのようにすれば、二重起動が禁止できるのでしょうか?

  • 再起動後のシステムチェックを無効化にする方法

    WINXPのHOMEでSP1を使用しております。オンラインゲームをインストールし、ゲームを終了後、スタンバイを選択すると再起動がかかり、システムチェックを行うようになりました。原因はオンライゲームだと思いますが、再起動までは良しとして、システムチェックを無効化する方法はありますか?またBIOSでM/Bの温度を見ると赤字65℃になっています。これが再起動の原因でしょうか?宜しくお願い致します。

  • Powershell プロセス二重起動

    PowerShell初心者です。 自身で起動中のスクリプトと同じコマンドで実行しているプロセスを検知し、他方のプロセスをkillしようと考えております。要は二重起動のチェックをしたいです。 現在コマンドラインで確認しているのですがどうもうまくいきません。 やろうとしている操作は以下です。 (1)ファイルにプロセス情報を出力。 PS C:\> $tempfile = "C:\pswork\servicemon\temp.log" PS C:\> Get-WmiObject win32_process ` | select Name, ProcessId, CommandLine ` | sort Name ` | Format-Table -AutoSize ` | Out-File -FilePath $tempfile -width 1000 (2)自分のPID以外のプロセス情報を取得 PS C:\> $mypid = $PID PS C:\> $killpidtmp = Get-Content $tempfile | Select-String -Pattern ".*powershell.exe.*svmon131_loop.*" |Select-String -NotMatch -Pattern "\s$mypid\s" PS C:\> echo $killpidtmp powershell.exe 2024 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command C:\pswork\servicemon\svmon131_loop.ps1 (3)splitでプロセス番号のみを取得。 PS C:\> $killpid = echo $killpidtmp |% {$($_-split(" "))[1]} PS C:\> echo $killpid ★ここがうまく取得できません。空白しか取得できていません。 (4)最終的には取得したPIDでプロセスを終了。 PS C:\pswork\servicemon> Stop-Process -ID $killpid Bシェルで同様のスクリプトがあったので、それを参考にPowerShellで書こうとしているので、 そもそも無理があるのかもしれないかと考えています。 上記の方法でなくてもよいので、二重起動のチェックと該当プロセスの停止で参考となる情報があれば教えて頂きたいです。

  • IEの2重起動抑止

    VBでのシステム開発でIEを起動するのに2重起動を抑止するようにしなければなりません。また、そのボタンから起動されたIEのみ2重起動抑止の対象とし、それ以外の場所から起動されたIEが上がっていてた場合はボタンを押せばIEが起動するといった方法がどうしたらいいのかわかりません。ご存知の方がいたら教えてください。よろしくお願いします。

  • 2重起動の制御に関して

    .netにてプログラムの2重起動チェックを行いたいのですが、 すでに起動済みのプログラムを起動しようとした場合、 起動されている方を終了してから後に起動された方を起動する ということは可能でしょうか? よろしくお願いします。

  • アプリケーション自動起動

    はじめて質問いたします。 宜しくお願いします。 Solaris8を使用しています。 Windowsのスタートアップのように、 Solaris8ログイン後、アプリケーションを自動起動させたいのですが、どのような方法で行えばよいのでしょうか? お手数をお掛けしますが、宜しくお願い致します。

  • スタートアップの二重起動

    WindowsXP Professional SP1で、All Usersのスタートアップ項目に「覚え書」「SpotWeather」など、いくつかのソフトを登録しているのですが、これらのソフトが起動時に必ず二重起動してしまいます。 二重起動できないものはいいのですが、二重起動するとエラーメッセージが出るものなどは特に気になります。 もちろん、All Users以外にスタートアップ項目への登録はないですし、一旦全てのプログラムを終了させてから電源をOFFにして再度起動してみても同じ状況でした。 また、msconfigで確認すると、スタートアップに登録しているソフトに関して、スタートアップ項目として、場所が「Common Startup」のものと「Startup」のものとの2種類があったのですが、片方のチェックを消すともう片方も消えてしまい、全く起動しないという状況になってしまいます。 どこかで確認・修正する方法はないでしょうか?