| 탐색 링크 건너뛰기 | |
| 인쇄 보기 종료 | |
|
시스템 관리 설명서: Oracle Solaris Containers-리소스 관리 및 Oracle Solaris 영역 Oracle Solaris 10 1/13 Information Library (한국어) |
프로세스, 작업 및 플로우에 대해 확장 계정을 활성화하는 방법
8. FSS(Fair Share Scheduler)(개요)
9. FSS(Fair Share Scheduler) 관리(작업)
10. 리소스 상한값 지원 데몬을 사용한 물리적 메모리 제어(개요)
15. Solaris Management Console의 리소스 제어 기능
19. 비전역 영역 설치, 정지, 복제 및 제거 정보(개요)
20. 비전역 영역 설치, 부트, 정지, 제거 및 복제(작업)
24. Oracle Solaris 10 9/10: 물리적 Oracle Solaris 시스템을 영역으로 마이그레이션(작업)
25. 영역이 설치된 Oracle Solaris 시스템의 패키지 및 패치 정보(개요)
26. 영역이 설치된 Oracle Solaris 시스템에서 패키지 및 패치 추가 및 제거(작업)
29. 비전역 영역이 설치된 Oracle Solaris 10 시스템 업그레이드
30. 그 밖의 기타 Oracle Solaris 영역 문제 해결
34. lx 브랜드 영역 설치, 부트, 정지, 복제 및 제거 정보(개요)
35. lx 브랜드 영역 설치, 부트, 정지, 제거 및 복제(작업)
다음 코드를 사용하여 exacct 객체의 내용을 반복적으로 인쇄할 수 있습니다. 이 기능은 라이브러리에서 Sun::Solaris::Exacct::Object::dump() 기능으로 제공됩니다. 또한 이 기능은 ea_dump_object() 편의 기능을 통해서도 사용할 수 있습니다.
sub dump_object
{
my ($obj, $indent) = @_;
my $istr = ' ' x $indent;
#
# Retrieve the catalog tag. Because we are
# doing this in an array context, the
# catalog tag will be returned as a (type, catalog, id)
# triplet, where each member of the triplet will behave as
# an integer or a string, depending on context.
# If instead this next line provided a scalar context, e.g.
# my $cat = $obj->catalog()->value();
# then $cat would be set to the integer value of the
# catalog tag.
#
my @cat = $obj->catalog()->value();
#
# If the object is a plain item
#
if ($obj->type() == &EO_ITEM) {
#
# Note: The '%s' formats provide s string context, so
# the components of the catalog tag will be displayed
# as the symbolic values. If we changed the '%s'
# formats to '%d', the numeric value of the components
# would be displayed.
#
printf("%sITEM\n%s Catalog = %s|%s|%s\n",
$istr, $istr, @cat);
$indent++;
#
# Retrieve the value of the item. If the item contains
# in turn a nested exacct object (i.e., an item or
# group),then the value method will return a reference
# to the appropriate sort of perl object
# (Exacct::Object::Item or Exacct::Object::Group).
# We could of course figure out that the item contained
# a nested item orgroup by examining the catalog tag in
# @cat and looking for a type of EXT_EXACCT_OBJECT or
# EXT_GROUP.
#
my $val = $obj->value();
if (ref($val)) {
# If it is a nested object, recurse to dump it.
dump_object($val, $indent);
} else {
# Otherwise it is just a 'plain' value, so
# display it.
printf("%s Value = %s\n", $istr, $val);
}
#
# Otherwise we know we are dealing with a group. Groups
# represent contents as a perl list or array (depending on
# context), so we can process the contents of the group
# with a 'foreach' loop, which provides a list context.
# In a list context the value method returns the content
# of the group as a perl list, which is the quickest
# mechanism, but doesn't allow the group to be modified.
# If we wanted to modify the contents of the group we could
# do so like this:
# my $grp = $obj->value(); # Returns an array reference
# $grp->[0] = $newitem;
# but accessing the group elements this way is much slower.
#
} else {
printf("%sGROUP\n%s Catalog = %s|%s|%s\n",
$istr, $istr, @cat);
$indent++;
# 'foreach' provides a list context.
foreach my $val ($obj->value()) {
dump_object($val, $indent);
}
printf("%sENDGROUP\n", $istr);
}
}
이 스크립트를 사용하여 새 그룹 레코드를 만들고 이를 /tmp/exacct라는 파일에 씁니다.
#!/usr/bin/perl
use strict;
use warnings;
use Sun::Solaris::Exacct qw(:EXACCT_ALL);
# Prototype list of catalog tags and values.
my @items = (
[ &EXT_STRING | &EXC_DEFAULT | &EXD_CREATOR => "me" ],
[ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_PID => $$ ],
[ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_UID => $< ],
[ &EXT_UINT32 | &EXC_DEFAULT | &EXD_PROC_GID => $( ],
[ &EXT_STRING | &EXC_DEFAULT | &EXD_PROC_COMMAND => "/bin/rec" ],
);
# Create a new group catalog object.
my $cat = ea_new_catalog(&EXT_GROUP | &EXC_DEFAULT | &EXD_NONE)
# Create a new Group object and retrieve its data array.
my $group = ea_new_group($cat);
my $ary = $group->value();
# Push the new Items onto the Group array.
foreach my $v (@items) {
push(@$ary, ea_new_item(ea_new_catalog($v->[0]), $v->[1]));
}
# Open the exacct file, write the record & close.
my $f = ea_new_file('/tmp/exacct', &O_RDWR | &O_CREAT | &O_TRUNC)
|| die("create /tmp/exacct failed: ", ea_error_str(), "\n");
$f->write($group);
$f = undef;
다음 Perl 스크립트를 사용하여 exacct 파일의 내용을 인쇄할 수 있습니다.
#!/usr/bin/perl
use strict;
use warnings;
use Sun::Solaris::Exacct qw(:EXACCT_ALL);
die("Usage is dumpexacct <exacct file>\n") unless (@ARGV == 1);
# Open the exact file and display the header information.
my $ef = ea_new_file($ARGV[0], &O_RDONLY) || die(error_str());
printf("Creator: %s\n", $ef->creator());
printf("Hostname: %s\n\n", $ef->hostname());
# Dump the file contents
while (my $obj = $ef->get()) {
ea_dump_object($obj);
}
# Report any errors
if (ea_error() != EXR_OK && ea_error() != EXR_EOF) {
printf("\nERROR: %s\n", ea_error_str());
exit(1);
}
exit(0);
이 출력 예는 새 그룹 레코드를 만들고 이를 파일에 쓰는 방법에서 만든 파일에 대해 Sun::Solaris::Exacct::Object->dump()를 실행하여 생성된 것입니다.
Creator: root
Hostname: localhost
GROUP
Catalog = EXT_GROUP|EXC_DEFAULT|EXD_NONE
ITEM
Catalog = EXT_STRING|EXC_DEFAULT|EXD_CREATOR
Value = me
ITEM
Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_PID
Value = 845523
ITEM
Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_UID
Value = 37845
ITEM
Catalog = EXT_UINT32|EXC_DEFAULT|EXD_PROC_GID
Value = 10
ITEM
Catalog = EXT_STRING|EXC_DEFAULT|EXD_PROC_COMMAND
Value = /bin/rec
ENDGROUP