kurumi-bioの雑記帳

プログラミング、パソコン、ペット、 犬、お出かけ

初心者のGo言語 -18- <Getpagesize,Getpid,Getppid,Getuid,Getwd,Hostname>

こんにちは、kurumi-bioです。 第5回目のosパッケージ(標準ライブラリー)の学習です。

環境

  • Windows
    OSバージョン:Windows11 Home 22H2
    Go言語のバージョン:go version go1.19.4 windows/amd64

  • Linux
    OSバージョン:openSUSE Leap 15.4
    Go言語のバージョン:go version go1.20.1 linux/amd64

Getpagesize関数

func Getpagesize() int

Getpagesize は、基になるシステムのメモリ ページ サイズを返します。

<サンプルコード>GetpagesizeSample.go

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println(os.Getpagesize())
}

<実行結果>

上がWindowsで下がLinuxの実行結果です。 両OSともにページサイズは4Kbという結果になりました。

Getpid関数

func Getpid() int

Getpid は、呼び出し元のプロセス ID を返します。

<サンプルコード>GetpidSample.go

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println(os.Getpid())
}

<実行結果>

実行するとプロセスIDが表示されました。
このプログラムですと一瞬で終わってしまうので正しい値か確認できません。
プログラムにtime.Sleep関数を追加して処理を1分間終わらせないようにしました。

<サンプルコード>GetpidSampleK1.go

package main

import (
    "fmt"
    "os"
    "time"
)

func main() {
    fmt.Println(os.Getpid())
    time.Sleep(time.Minute * 1)
}

<実行結果>

タスクマネージャの詳細画面を見ると、
プロセスID 8424のプロセスは、GetpidSampleK1.exeとなっています。
go runコマンドは、ビルドしてEXEにしてから実行していることがわかります。

Getppid関数

func Getppid() int

Getppid は、呼び出し元の親のプロセス ID を返します

<サンプルコード>GetppidSample.go

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println(os.Getppid())
}

<実行結果>

2回実行しましたが、2回とも別のプロセスIDが表示されました。
ひとつ前でgo runコマンドを実行すると「ビルドして実行」となっていることが判明しました。 ですので、表示されている親プロセスIDは、「ビルドして実行」のプロセスIDだと思われます。
では、試しにtime.Sleep関数を追加して実行してみます。

<サンプルコード>GetppidSampleK1.go

package main

import (
    "fmt"
    "os"
    "time"
)

func main() {
    fmt.Println(os.Getpid())
    fmt.Println(os.Getppid())
    time.Sleep(time.Minute * 1)
}

<実行結果>

親プロセスは、go.exeでした。go runを実行しているの当然なのですが、 ビルドしたモジュールが終わるのを待っているのが意外でした。

ちなみに、ビルドしてexe形式にしてから実行すると、親プロセスがコマンドプロンプトになるので、 何度実行しても親プロセスIDは同じになります。

<広告の下に記事が続きます。>

Getuid関数

func Getuid() int

Getuid は、呼び出し元の数値ユーザー ID を返します。 Windows では -1 を返します。

<サンプルコード>GetuidSample.go

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println(os.Getuid())
}

<実行結果>

上がWindowsで下がLinuxの実行結果です。 Linuxは、ユーザIDが取得できています。

Getwd関数

func Getwd() (dir string, err error)

Getwd は、現在のディレクトリに対応するルート パス名を返します。 (シンボリック リンクにより) 複数のパスを介して現在のディレクトリに到達できる場合、Getwd はそれらのいずれかを返す場合があります。

<サンプルコード>GetwdSample.go

package main

import (
    "fmt"
    "os"
)

func main() {
    s, e := os.Getwd()
    if e != nil {
        fmt.Fprintf(os.Stderr, "os.Getwd Error: %v \n", e)
        os.Exit(1)
    }
    fmt.Println(s)
}

<実行結果>

パス名が取得できました。

Hostname関数

func Hostname() (name string, err error)

Hostname は、カーネルによって報告されたホスト名を返します。

<サンプルコード>HostnameSample.go

package main

import (
    "fmt"
    "os"
)

func main() {
    s, e := os.Hostname()
    if e != nil {
        fmt.Fprintf(os.Stderr, "os.Hostname Error: %v \n", e)
        os.Exit(1)
    }
    fmt.Println(s)
}

<実行結果>

ホスト名が取得できました。

最後までご覧いただきありがとうございます