출처 블로그 > *********Oracle and Linux*********
원본 http://blog.naver.com/bumsyang/120037163094

 <sendmail>

**필요 패키지**
sendmail-cf-8.13.1-3.RHEL4.5
sendmail-8.13.1-3.RHEL4.5
dovecot-0.99.11-4.EㅁL4

**내부 <-> 내부, 내부 -> 외부 로 보낼 경우는 POP3가 필요 없음.
그러므로 sendmail관련 패키지만 설치한 후 아무런 설정없이 가능.**

**외부 -> 내부 로 보낼 경우 /etc/mail/local-host-names 와

zone파일만 수정(name서버는 동작 중이어야 한다.)**

↓↓↓ POP3(외부(outlook)->외부(naver,daum))를 위한 설정 ↓↓↓

ⓞ 설정 파일

/var/spool/mqueue : 사용자가 메일을 보낼 때 사용하는 SMTP 서버에서 메일을 발송하기전 임시적으로 사용자의 메일을 보관하는 곳이다.
/var/spool/mail   : 다른사용자에 의해 전송된 메일이 내 SMTP 서버에 임시적으로 저장되는 곳이며 POP3 서버에 의해 메일이 전달될때까지 보관하게 된다.
/etc/mail/access  : SMTP 서버의 이용을 제한하는 설정파일

                               (RELAY, REJECT, DISCARD, OK)
/etc/aliases  
/etc/mail/local-host-names : 메일의 최종 수신지를 지정하는 곳이다.(도메인)
/etc/mail/sendmail.mc : 중요 설정 파일
/etc/mail/sendmail.cf : m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf을 이용해 생성
/etc/mail/virtusertable

① 패키지 설치
 - sendmail-cf, dovecot
  
② /etc/mail/local-host-names
   자신의 도메인명을 입력

③ /var/named/...........zone 파일 수정
 - IN MX 10 mail.도메인명.
 - mail IN A 네임서버IP

④ /etc/mail/senmail.cf 파일 수정
 - 89행쯤 : Cwlocalhost -> Cw도메인명
 - 265행쯤 : O DaemonPortOptions=Port=smtp, Addr=127.0.0.1, Name=MTA : MTA(Mail Transfer Agent) ex)sendmail
    -> Addr=127.0.0.1을 삭제
 
 - /etc/init.d/sendmail restart

⑤ /etc/mail/access 파일 수정
 - 도메인명 RELAY 추가
 - makemap hash /etc/mail/access < /etc/mail/access 로 적용 : DB화 시킨다.
 
⑥ /etc/dovecot.conf 파일 수정
 - 14 행쯤 : protocol = pop3
 - 22 행쯤 : pop3_listen = [ : : ] -> pop3_listen = *      //[ : : ]는 IPv6를 의미한다. 그러므로 IPv4인 *로 변경
 - 87 행쯤 : login_executable = /usr/libexec/dovecot/imap-login -> 주석 제거
 - 132 행쯤 : login_executable = /usr/libexec/dovecot/pop3-login -> 주석 제거
 - 166 행쯤 : mail_extra_groups =  -> mail_extra_groups = mail
 - 194 행쯤 : default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u -> 주석 제거
 - 338 행쯤 : imap_executable = /usr/libexec/dovecot/imap -> 주석 제거
 - 353 행쯤 : pop3_executable = /usr/libexec/dovecot/pop3 -> 주석 제거
 - 437 행쯤 : auth_executable = /usr/libexec/dovecot/dovecot-auth -> 주석 제거
 
 - /etc/init.d/dovecot restart
 
⑦ /etc/mail/sendmail.mc 파일 수정
 - TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl 와
  define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') 두 부분의 주석을 제거해 준다음
   - m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf 를 실행 : mc파일을 cf로 변환시키는것
 - /etc/init.d/sendmail restart : sendmail을 재시작한다.

⑧ /etc/init.d/saslauthd start
 
⑨ 메일 계정 사용자 생성

⑪ 로그 파일의 위치
 /var/log/maillog

최종 수정일 : 2001년 9월 2일
글쓴이 : 윤 일(admin@rootman.org)

HOW-TO Configuration aliases(/etc/aliases)


요약...
aliases 파일은 vitusertable과 비슷한 역활을 하는 파일이다. 하지만 vitusertable과는 달리 도메인별로는 설정할 수 없고
단지 가상의 유저명 혹은 실제 유저명으로만 설정할 수 있다는 단점이 있지만 특정 유저명으로 오는 메일을 여러 사용자에게
또는 외부 SMTP로 포워딩할 수 있다는 장점을 가지고 있다. 이러한 이유때문에 소규모의 메일링 리스트를 운영할 때 종종 사용된다.
...
...

출처 및 본 자료 : 네이버 루트맨님의 블로그

리눅스(linux)에서 ssh 접속시 접속 계정을 제한 할 수 있다.

/etc/ssh/sshd_config

파일을 vi로 연다.



1. 접속자 제한

AllowUsers 계정, 계정.... 계정

이 부분을 추가한다. 적혀있는 계정만이 접속이 가능하다.
아마두, DenyUsers는 막는 것이지 않을까?
근데 AllowUsers 에 없으면, 접속이 안되니, DenyUsers는 필요 없을지도 @^-^@


2. root 계정 접속 제한/허용

PermitRootLogin yes  
이렇게 하면, root가 원격에서 접속 가능
PermitRootLogin no
이렇게 하면, root는 로컬에서만 접속이 가능하다.
즉, 다른 계정(접속이 허용된)으로 접속한 뒤 "su -"를 통해 root로 접속이 가능하다.
이는, 외부에서 root계정을 해킹하여 접속하는 것을 막아주어 의외로 보안에 큰 효과를 볼수 있다.

'도서관 I > 리눅스' 카테고리의 다른 글

[펌] sendmail 구축및 설정  (0) 2007.05.17
[펌] aliases 설정법  (0) 2007.05.09
[펌] crontab 사용법  (0) 2007.05.07
[펌] 서버 관리를 위한 ssh 서버 보안세팅  (0) 2006.10.30
[바람이] gdb의 간단한 사용법  (2) 2006.09.19

출처 : 네이버 초록몽 님 블로그


crontab 사용

정기적으로 수행하고자 하는 cron 작업을 관리.


문법

  • crontab [ -e | -l | -r | -v | File ]
 e: 편집 l: 리스트(조회) r: 제거 v: 작업상태
 

crontab 내용 편집

  • crontab -e
  • 형식: minute(분) hour(시) day_of_month(일) month(월) weekday(요일) command(명령)
 minute(분) 0 - 59 
 hour(시) 0 - 23 
 day_of_month(일) 1 - 31 
 month(월) 1 - 12 
 weekday(요일) 일요일부터 금요일까지를 나타내는 0 - 6 
 command(명령) 쉘 명령
 

예) 디렉토리 backup

 

  • shell scipt 작성(backup.sh, 디렉토리 /source를 archive하여 백업)
 
#!/bin/sh 
/bin/tar cvfz /backup/backup-`date +%Y-%m-%d`.tar.gz /source 
 
 
  • crontab 등록
 
59 23 * * * /bin/backup.sh
 

매일 23:59 분에 /bin/backup.sh가 실행되어 /source 디렉토리의 모든 파일이

/backup/backup-20051201.tar.gz 과 같은 형태로 저장된다.


서버 관리를 위한 ssh 서버 보안세팅

/etc/ssh/sshd_config 파일


# $OpenBSD: sshd_config,v 1.48 2002/02/19 02:50:59 deraadt Exp $
# This is the sshd server system-wide configuration file. See sshd(8)
# for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.

Port 22
- ssh가 사용할 기본 포트 지정
Allowusers kkamji2411 root (로그인 허락할 계정 써준다.)

Protocol 2
- openssh는 프로토콜 버전을 원하는 대로 선택할 수 있다. protocol 2로 설정에는
서버는 버전 2로만 작동하기 때문에 ssh1을 사용해 접속을 요청하는 클라이언트를
받아 들일 수 없다.
- protocol 1로 설정해서 가동시킬 경우에는 버전 2로를 사용하는 ssh2 사용자의 요청을
받아 들일 수 없다. 보안상 protocol 1 은 사용하지 않는다.


ListenAddress 0.0.0.0
- sshd 데몬이 귀를 기울일 주소이다. 0.0.0.0은 모든 곳을 말한다.

#ListenAddress ::

#HostKey for protocol version 1
HostKey /etc/ssh/ssh_host_key
- protocol 1.3과 1.5에 의해 사용되어지는 private RSA 호스트 키 값이 저정되어
있는 파일이다. 현재는 /etc/ssh/ssh_host_key에 저장되어 있다. pulick key는
/etc/ssh/ssh_host_key.pub이다.


#HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key

#Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
- 서버의 키는 한번 접속이 이루어진 뒤에 자동적으로 다시 만들어진다. 다시
만드는 목적은 나중에 호스트의 세션에 있는 키를 캡처해서 암호를 해독하거나
훔친 키를 사용하지 못하도록 하기 위함 위함이다. 값이 0이면 키는 다시
만들어지지 않는다. 기본값은 3600초이다.


ServerKeyBits 1024
- 서버 키의 비트수를 정의한다. 최소값은 512이고 디폴트 값은 768이다.

#Logging
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
- /etc/syslog.conf에서 정의한 로그 facility 코드이다. 가능한 값은 DAEMON, USER,
AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7이다.
기본값은 AUTH이다.


SyslogFacility AUTH
LogLevel INFO

- 로그 레벌을 지정하는 것이다. 가능한 값은 QUIET, FATAL, ERROR, INFO, VERBOSE
그리고 DEBUGS이다.


#Authentication:

LoginGraceTime 600
- 유저가 로그인을 성공적으로 이루어지 않았을 때 이 시간 후에 서버가 연결을
끊는 시간이다. 값이 0이면 제한 시간이 없다. 기본값은 600초이다.


PermitRootLogin yes
==> 보안상 no로 해준다.
- root 로그인 허용여부를 결정하는 것이다. yes, no, without-password를 사용할
수 있다. 현재 yes로 되어 있기 때문에 직접 root로 접속이 가능하다. 이것을
허용하지 않으려면 no나 without-password로 바꾼다.


#StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes

#AuthorizedKeysFile .ssh/authorized_keys

#rhosts authentication should not be used
#rhosts authentication should not be used
RhostsAuthentication no
#Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
#For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
RhostsRSAAuthentication no
- rhost나 /etc/hosts.equiv파일이 있으면 이것을 사용해 인증한다. 이것은 보안상
별로 안좋은 방법이기 때문에 허용하지 않는다.


#similar for protocol version 2
HostbasedAuthentication no
#Change to yes if you don't trust ~/.ssh/known_hosts for
#RhostsRSAAuthentication and HostbasedAuthentication
IgnoreUserKnownHosts no

#To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
- 패스워드 인증을 허용한다. 이 옵션은 프로토콜 버전 1과 2 모두 적용된다.

PermitEmptyPasswords no
- 패스워드 인증을 할 때 서버가 비어있는 패스워드를 인정하는 것이다. 기본 값은 no이다.

#Change to no to disable s/key passwords
#
http://www.korea.iss.net/alertcon5.htm 참고
ChallengeResponseAuthentication no

#Kerberos options
#KerberosAuthentication automatically enabled if keyfile exists
#KerberosAuthentication yes
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

#AFSTokenPassing automatically enabled if k_hasafs() is true
#AFSTokenPassing yes

#Kerberos TGT Passing only works with the AFS kaserver
#KerberosTgtPassing no

# Set this to 'yes' to enable PAM keyboard-interactive authentication
#Warning: enabling this may bypass the setting of 'PasswordAuthentication'
#PAMAuthenticationViaKbdInt yes

X11Forwarding no
- 원격에서 X11 포워딩을 허용하는 것이다. 이 옵션을 yes로 설정하면 xhost보다
안전한 방법으로 원격에 있는 X프로그램을 사용할 수 있다. yes로 설정 후 데몬
재가동을 하고 테스트해 보자.


#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#KeepAlive yes
#UseLogin no
#MaxStartups 10
#no default banner path
#Banner /some/path
#VerifyReverseMapping no

#override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
- sftp는 프로토콜 버전 2에서 사용되는 것으로서 ssh와 같이 ftp의 보안을
강화하기 위해 사용되는 보안 ftp프로그램이다.
openssh를 설치하면 /usr/local/ssh/libexec/sftp-server파일이 설치된다.
이것은 sftp 서버용 프로그램이다. 클라이언트 sftp프로그램은 설치되지않는다.
따라서 서버로 일단 가동시키고 원도용 ssh클라이언트 프로그램이나
SSH2를 설치하면 sftp를 사용할 수 있다

* gdb란?
  Command line Debugging을 위해 사용되는 Debugger

* 기본 명령어
  - r : Run
  - b 함수이름 or b 줄번호 : Breakpoint
  - n : Next step
  - c : Continue
  - q : Quit


1. File System 별 용량 확인
     #df - h [path]

2. 각 폴더별 용량 확인
      #du -h --max-depth=1 [path]

3. mysqldump
     #mysqldump -u[사용자ID] -p[Password] [Dump할 Database이름] > [생성할 Dump 파일 이름]
     ex)#mysqldump -uroot -proot test_db > test_dump.sql

4. crontab
    #crontab {-e|-l|-r}
       -e : crontab 수정
       -l : crontab 리스트 보기
       -r : crontab 삭제

    # 형식
        m h d m w [사용자] [명령어]
        * : 모든 숫자를 의미
        - : 기간을 의미 ex) 7-24 (7일부터 24일까지)
        , : 각각 숫자를 의미 ex) 7,24 (7일과 24일)

   ex) 30 5 * * * root /root/backup.sh
         매일 새벽 5시 30분에 root의 권한으로 /root/backup.sh를 실행한다.





한 task는 mm_struct를 가지고 있다. (struct mm_struct* mm;)

mm은 Memory Management의 약자이다.

즉, task에 대한 Memory를 관리 해준다.

그림에서 보듯이 mm_struct는 vmarea 라는 구조체를 연결되어 가지고 있다.

이때 각각의 vmarea는 Text , Data , Heap , Stack 영역에 대한 Virtual한 Address 정보를 가지고 있다.



위에 그림은 한 task가 가지는 mm_struct가 관리하는 Virtual Memory를 표현하고 있다. (제가 그려서 좀 허접하죠 @^-^@)

이때 text, data, heap , stack을 관리하는 vmarea는

말그대로 Virtual Memory Area를 관리한다.

때문에 mm_struct는 Logical(virtual이라고 볼수도...)과 Physical

Memory간에 Mapping이 필요하게 된다.

쪼~~~기 위에 그림을 다시 보면 mm_struct는 또 pgd(Page Directory Table)를 가지고 있다.

이것이 바로 Logical과 Physical을 Mapping해주는 역할을 한다.

pgd 는 각각에 대해 pmd(Page Middle Directory Table)을 가지며

pmd는 pte(Page Table Entry)를 가진다.

pte는 dirty나 ref copy등을 처리하지만, 여기선 논외로 한다.

이런 방식을 통해 Logical과 physical을 Mapping한다는 것만 알고 있자


보는 바와 같이 task는 처음 생성이 되면 곧바로 실행이 되지 않는다.

대부분 Kernel은 크게 두개의 Queue 를 사용한다.

물론 기법에 따라 다 다르다. 하지만, 사용 개념은 같다.

어떤 Kernel은 몇개의 Queue를 우선순위별로 사용하지만,

큰 개념은 두개의 Queue다.

1. Runnable Queue 혹은 Ready Queue 라고 한다.

2. Blocked Queue 혹은 Sleep Queue 라고 한다.

이 두 Queue는 Multitasking 을 하기 위한 필수 기법이라고 할수 있다.

이를 통해 우리는 여러 Program 을 동시에 수행하듯이 사용할수 있는 것이다.

우선 한 task가 생성이 되면 Runnable Queue에 들어가서

Scheduling을 통해 실행상태(Running State)가 되길 기다린다.

이러다가 Scheduling을 통해 실행상태가 되면 수행을 하다가 두가지 경우가 발생할수 있다.

1. Time Slice Expired

실행상태에서 task에 주어진 시간을 모두 소진 하였을때이다.

고급


2. I/O Request or Event Occured

수행 시간이 오래걸리는 I/O 요청이나

MFC 프로그램 처럼 Event 중심 프로그램이 Event가 발생되기를 기다리는 동안에는

CPU를 할당 받지 않고 수행의 대상이 되지 않는 Blocked Queue에서

대기 하게 된다.

Blocked Queue에 삽입 되면, Interrupt가 발생이 되어야만 다시 Ready Queue에 삽입이 될 수 있다.

이때 Interrupt는 다양한 Signal이 될 수도 있고, Event가 될 수도 있다.

Interrupt가 되어 I/O가 완료되거나, Event가 발생하게 되면

해당 task는 Blocked Queue에서 Ready Queue로 전환되게 된다.
task_struct는 task의 한 단위로서의 역할을 하고 있다.

가끔 process와 thread와의 차이를 말끔히 정의하기 어려운 때가 있다.

하지만, Linux에서는 process와 thread의 차이를 명확히 두고 있지 않다.

즉, 다음에 나오는 task_struct가 task로서 하나의 수행 단위가 되고 있는 것이다.

process이든 thread이든 동일하게 task_struct로 생성이 되어

PCB(Process Control Block)이 된다.

하지만, 분명 thread는 자신이 포함되어 있는 process가 소멸 될 시 자신도 소멸되어야 한다.

때문에 최근에는 pid 부여를 하는 방법에서 특정 기법을 이용하여

thread가 process에 속함을 기록해 놓는다.

자세한 구조체 내용은 밑에 나열하겠다.



*** task_struct 구조체 정의 위치 ***

/usr/src/linux-2.6.12.3/include/linux/sched.h 에 존재함 (일반적으로 Kernel에 Install시에)



struct task_struct {
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
// task 의 상태를 기록하고 있다.
// -1 : Disk I/O 등으로 Blocked 되어 Blocked Queue에 있는 상태
// 0 : 현재 Runnable Queue에 존재하며 언제 실행될지 모르는 상태
// >0 : stopped 상태. Debug나 그 외의 이유로 task가 중지되어 있는 상태임

struct thread_info *thread_info;
atomic_t usage;
unsigned long flags; /* per process flags, defined below */
unsigned long ptrace;

int lock_depth; /* BKL lock depth */

int prio, static_prio;
struct list_head run_list;
prio_array_t *array;

unsigned long sleep_avg;
unsigned long long timestamp, last_ran;
unsigned long long sched_time; /* sched_clock time spent running */
int activated;

unsigned long policy;
cpumask_t cpus_allowed;
unsigned int time_slice, first_time_slice;

#ifdef CONFIG_SCHEDSTATS
struct sched_info sched_info;
#endif

struct list_head tasks;
/*
* ptrace_list/ptrace_children forms the list of my children
* that were stolen by a ptracer.
*/
struct list_head ptrace_children;
struct list_head ptrace_list;

struct mm_struct *mm, *active_mm;

/* task state */ struct linux_binfmt *binfmt;
long exit_state;
int exit_code, exit_signal; // task가 종료시 부모에게 return value int pdeath_signal; /* The signal sent when the parent dies */
/* ??? */

unsigned long personality; // 현재 지원되는 Unix 버전 번호 unsigned did_exec:1; // task가 생성된 뒤에 exec()을 통해 새로운 program이 load되었는지 유무 기록 pid_t pid; // task에게 부여된 고유 번호라고 할 수 있음 pid_t tgid;
/*
* pointers to (original) parent process, youngest child, younger sibling,
* older sibling, respectively. (p->father can be replaced with
* p->parent->pid)
*/

struct task_struct *real_parent; /* real parent process (when being debugged) */
struct task_struct *parent; /* parent process */
/*
* children/sibling forms the list of my children plus the
* tasks I'm ptracing.
*/
struct list_head children; /* list of my children */
struct list_head sibling; /* linkage in my parent's children list */
struct task_struct *group_leader; /* threadgroup leader */

/* PID/PID hash table linkage. */ struct pid pids[PIDTYPE_MAX];

struct completion *vfork_done; /* for vfork() */
int __user *set_child_tid; /* CLONE_CHILD_SETTID */
int __user *clear_child_tid; /* CLONE_CHILD_CLEARTID */

unsigned long rt_priority;
cputime_t utime, stime;
unsigned long nvcsw, nivcsw; /* context switch counts */
struct timespec start_time;
/* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */ unsigned long min_flt, maj_flt;

cputime_t it_prof_expires, it_virt_expires;
unsigned long long it_sched_expires;
struct list_head cpu_timers[3];

/* process credentials */ uid_t uid,euid,suid,fsuid;
gid_t gid,egid,sgid,fsgid;
struct group_info *group_info;
kernel_cap_t cap_effective, cap_inheritable, cap_permitted;
unsigned keep_capabilities:1;
struct user_struct *user;
#ifdef CONFIG_KEYS
struct key *thread_keyring; /* keyring private to this thread */
#endif
int oomkilladj; /* OOM kill score adjustment (bit shift). */
char comm[TASK_COMM_LEN]; /* executable name excluding path
- access with [gs]et_task_comm (which lock
it with task_lock())
- initialized normally by flush_old_exec */
/* file system info */
int link_count, total_link_count;
/* ipc stuff */ struct sysv_sem sysvsem;
/* CPU-specific state of this task */ struct thread_struct thread;
/* filesystem information */ struct fs_struct *fs;
/* open file information */ struct files_struct *files;
/* namespace */ struct namespace *namespace;
/* signal handlers */ struct signal_struct *signal;
struct sighand_struct *sighand;

sigset_t blocked, real_blocked;
struct sigpending pending;

unsigned long sas_ss_sp;
size_t sas_ss_size;
int (*notifier)(void *priv);
void *notifier_data;
sigset_t *notifier_mask;

void *security;
struct audit_context *audit_context;
seccomp_t seccomp;

/* Thread group tracking */ u32 parent_exec_id;
u32 self_exec_id;
/* Protection of (de-)allocation: mm, files, fs, tty, keyrings */ spinlock_t alloc_lock;
/* Protection of proc_dentry: nesting proc_lock, dcache_lock, write_lock_irq(&tasklist_lock); */ spinlock_t proc_lock;
/* context-switch lock */ spinlock_t switch_lock;

/* journalling filesystem info */ void *journal_info;

/* VM state */ struct reclaim_state *reclaim_state;

struct dentry *proc_dentry;
struct backing_dev_info *backing_dev_info;

struct io_context *io_context;

unsigned long ptrace_message;
siginfo_t *last_siginfo; /* For ptrace use. *//*
* current io wait handle: wait queue entry to use for io waits
* If this thread is processing aio, this points at the waitqueue
* inside the currently handled kiocb. It may be NULL (i.e. default
* to a stack based synchronous wait) if its doing sync IO.
*/

wait_queue_t *io_wait;
/* i/o counters(bytes read/written, #syscalls */ u64 rchar, wchar, syscr, syscw;
#if defined(CONFIG_BSD_PROCESS_ACCT)
u64 acct_rss_mem1; /* accumulated rss usage */ u64 acct_vm_mem1; /* accumulated virtual memory usage */ clock_t acct_stimexpd; /* clock_t-converted stime since last update */#endif
#ifdef CONFIG_NUMA
struct mempolicy *mempolicy;
short il_next;
#endif
#ifdef CONFIG_CPUSETS
struct cpuset *cpuset;
nodemask_t mems_allowed;
int cpuset_mems_generation;
#endif
};

+ Recent posts