fork(2): create child process - Linux man page https://linux.die.net/man/2/fork

fork(2) - Linux man page

Name

fork - create a child process

Synopsis

#include <unistd.h>

pid_t fork(void);

Description

 

fork() creates a new process by duplicating the calling process. The new process, referred to as the child, is an exact duplicate of the calling process, referred to as the parent, except for the following points:

*
The child has its own unique process ID, and this PID does not match the ID of any existing process group (setpgid(2)).
*
The child's parent process ID is the same as the parent's process ID.
*
The child does not inherit its parent's memory locks (mlock(2)mlockall(2)).
*
Process resource utilizations (getrusage(2)) and CPU time counters (times(2)) are reset to zero in the child.
*
The child's set of pending signals is initially empty (sigpending(2)).
*
The child does not inherit semaphore adjustments from its parent (semop(2)).
*
The child does not inherit record locks from its parent (fcntl(2)).
*
The child does not inherit timers from its parent (setitimer(2)alarm(2)timer_create(2)).
*
The child does not inherit outstanding asynchronous I/O operations from its parent (aio_read(3)aio_write(3)), nor does it inherit any asynchronous I/O contexts from its parent (see io_setup(2)).

The process attributes in the preceding list are all specified in POSIX.1-2001. The parent and child also differ with respect to the following Linux-specific process attributes:

*
The child does not inherit directory change notifications (dnotify) from its parent (see the description of F_NOTIFY in fcntl(2)).
*
The prctl(2) PR_SET_PDEATHSIG setting is reset so that the child does not receive a signal when its parent terminates.
*
The default timer slack value is set to the parent's current timer slack value. See the description of PR_SET_TIMERSLACK in prctl(2).
*
Memory mappings that have been marked with the madvise(2) MADV_DONTFORK flag are not inherited across a fork().
*
The termination signal of the child is always SIGCHLD (see clone(2)).
*
The port access permission bits set by ioperm(2) are not inherited by the child; the child must turn on any bits that it requires using ioperm(2).

Note the following further points:

*
The child process is created with a single thread--the one that called fork(). The entire virtual address space of the parent is replicated in the child, including the states of mutexes, condition variables, and other pthreads objects; the use of pthread_atfork(3) may be helpful for dealing with problems that this can cause.
*
The child inherits copies of the parent's set of open file descriptors. Each file descriptor in the child refers to the same open file description (see open(2)) as the corresponding file descriptor in the parent. This means that the two descriptors share open file status flags, current file offset, and signal-driven I/O attributes (see the description of F_SETOWN and F_SETSIG in fcntl(2)).
*
The child inherits copies of the parent's set of open message queue descriptors (see mq_overview(7)). Each descriptor in the child refers to the same open message queue description as the corresponding descriptor in the parent. This means that the two descriptors share the same flags (mq_flags).
*
The child inherits copies of the parent's set of open directory streams (see opendir(3)). POSIX.1-2001 says that the corresponding directory streams in the parent and child may share the directory stream positioning; on Linux/glibc they do not.

Return Value

On success, the PID of the child process is returned in the parent, and 0 is returned in the child. On failure, -1 is returned in the parent, no child process is created, and errno is set appropriately.

Errors

EAGAIN
fork() cannot allocate sufficient memory to copy the parent's page tables and allocate a task structure for the child.
EAGAIN
It was not possible to create a new process because the caller's RLIMIT_NPROC resource limit was encountered. To exceed this limit, the process must have either the CAP_SYS_ADMIN or the CAP_SYS_RESOURCE capability.
ENOMEM
fork() failed to allocate the necessary kernel structures because memory is tight.
ENOSYS
fork() is not supported on this platform (for example, hardware without a Memory-Management Unit).

Conforming to

SVr4, 4.3BSD, POSIX.1-2001.

Notes

Under Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.

Since version 2.3.3, rather than invoking the kernel's fork() system call, the glibc fork() wrapper that is provided as part of the NPTL threading implementation invokes clone(2) with flags that provide the same effect as the traditional system call. (A call to fork() is equivalent to a call to clone(2) specifying flags as just SIGCHLD.) The glibc wrapper invokes any fork handlers that have been established using pthread_atfork(3).

Example

See pipe(2) and wait(2).

See Also

clone(2)execve(2)exit(2)setrlimit(2)unshare(2)vfork(2)wait(2)daemon(3)capabilities(7),credentials(7)

Referenced By

atexit(3), chdir(2), chroot(2), collectd-exec(5), core(5), cpuset(7), csh(1), dbpmda(1), dc_client(1),dc_ctx_new(2), dkim-filter(8), dkim-filter.conf(5), epic(1), epoll(7), eventfd(2), exec(3), explain(1),explain(3), explain_fork(3), explain_fork_or_die(3), faxq(8), fetchnews(8), fio(1), flock(2),forkpty(3), getitimer(2), getpid(2), getrlimit(2), gettid(2), halockrun(1), hylafax-log(5),ibv_fork_init(3), inn.conf(5), iopl(2), iv_signal(3), ksh93(1), lseek(2), ltrace(1), mmap(2), mount(2),mpadvise(3), nice(2), on_exit(3), opendkim(8), opendkim.conf(5), pam_end(3), perlfunc(1),pipe(7), pmcd(1), popen(3), proc(5), pth(3), pthreads(7), ptrace(2), sched_getaffinity(2),sched_setscheduler(2), sec(1), select_tut(2), sem_init(3), set_mempolicy(2), setns(2), setpgrp(2),setpriority(2), setsid(2), shmat(2), sigaction(2), sigaltstack(2), signal(7), signalfd(2),sigprocmask(2), smartd(8), smartd.conf(5), strace(1), sudo(8), syslogd(8), system(3),timerfd_create(2), umask(2), wait4(2), xargs(1)

 
 

pid 22288  通过

cmd_ = 'python {}{}{} {} {} '.format(this_file_abs_path, os.sep, py, dateFrom, dateEnd)

产生 pid 4422

[root@d Polly]# cat /proc/version
Linux version 3.10.0-123.9.3.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Thu Nov 6 15:06:03 UTC 2014
[root@d Polly]# tree /proc/22288/
/proc/22288/
├── attr
│   ├── current
│   ├── exec
│   ├── fscreate
│   ├── keycreate
│   ├── prev
│   └── sockcreate
├── autogroup
├── auxv
├── cgroup
├── clear_refs
├── cmdline
├── comm
├── coredump_filter
├── cpuset
├── cwd -> /data/mapReduceVisitorLog/mapReduceLogAUTO
├── environ
├── exe -> /root/anaconda3/bin/python3.5
├── fd
│   ├── 0 -> /dev/null
│   ├── 1 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
│   └── 2 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
├── fdinfo
│   ├── 0
│   ├── 1
│   └── 2
├── gid_map
├── io
├── limits
├── loginuid
├── maps
├── mem
├── mountinfo
├── mounts
├── mountstats
├── net
│   ├── anycast6
│   ├── arp
│   ├── connector
│   ├── dev
│   ├── dev_mcast
│   ├── dev_snmp6
│   │   ├── eth0
│   │   ├── eth1
│   │   └── lo
│   ├── fib_trie
│   ├── fib_triestat
│   ├── icmp
│   ├── if_inet6
│   ├── igmp
│   ├── igmp6
│   ├── ip6_flowlabel
│   ├── ip6_mr_cache
│   ├── ip6_mr_vif
│   ├── ip_mr_cache
│   ├── ip_mr_vif
│   ├── ip_tables_matches
│   ├── ip_tables_names
│   ├── ip_tables_targets
│   ├── ipv6_route
│   ├── mcfilter
│   ├── mcfilter6
│   ├── netfilter
│   │   └── nf_log
│   ├── netlink
│   ├── netstat
│   ├── packet
│   ├── protocols
│   ├── psched
│   ├── ptype
│   ├── raw
│   ├── raw6
│   ├── route
│   ├── rpc
│   │   ├── auth.unix.gid
│   │   │   ├── channel
│   │   │   ├── content
│   │   │   └── flush
│   │   └── auth.unix.ip
│   │   ├── channel
│   │   ├── content
│   │   └── flush
│   ├── rt6_stats
│   ├── rt_acct
│   ├── rt_cache
│   ├── snmp
│   ├── snmp6
│   ├── sockstat
│   ├── sockstat6
│   ├── softnet_stat
│   ├── stat
│   │   ├── arp_cache
│   │   ├── ndisc_cache
│   │   └── rt_cache
│   ├── tcp
│   ├── tcp6
│   ├── udp
│   ├── udp6
│   ├── udplite
│   ├── udplite6
│   ├── unix
│   ├── wireless
│   └── xfrm_stat
├── ns
│   ├── ipc -> ipc:[4026531839]
│   ├── mnt -> mnt:[4026531840]
│   ├── net -> net:[4026531956]
│   ├── pid -> pid:[4026531836]
│   └── uts -> uts:[4026531838]
├── numa_maps
├── oom_adj
├── oom_score
├── oom_score_adj
├── pagemap
├── personality
├── projid_map
├── root -> /
├── sched
├── sessionid
├── smaps
├── stack
├── stat
├── statm
├── status
├── syscall
├── task
│   └── 22288
│   ├── attr
│   │   ├── current
│   │   ├── exec
│   │   ├── fscreate
│   │   ├── keycreate
│   │   ├── prev
│   │   └── sockcreate
│   ├── auxv
│   ├── cgroup
│   ├── clear_refs
│   ├── cmdline
│   ├── comm
│   ├── cpuset
│   ├── cwd -> /data/mapReduceVisitorLog/mapReduceLogAUTO
│   ├── environ
│   ├── exe -> /root/anaconda3/bin/python3.5
│   ├── fd
│   │   ├── 0 -> /dev/null
│   │   ├── 1 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
│   │   └── 2 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
│   ├── fdinfo
│   │   ├── 0
│   │   ├── 1
│   │   └── 2
│   ├── gid_map
│   ├── io
│   ├── limits
│   ├── loginuid
│   ├── maps
│   ├── mem
│   ├── mountinfo
│   ├── mounts
│   ├── ns
│   │   ├── ipc -> ipc:[4026531839]
│   │   ├── mnt -> mnt:[4026531840]
│   │   ├── net -> net:[4026531956]
│   │   ├── pid -> pid:[4026531836]
│   │   └── uts -> uts:[4026531838]
│   ├── numa_maps
│   ├── oom_adj
│   ├── oom_score
│   ├── oom_score_adj
│   ├── pagemap
│   ├── personality
│   ├── projid_map
│   ├── root -> /
│   ├── sched
│   ├── sessionid
│   ├── smaps
│   ├── stack
│   ├── stat
│   ├── statm
│   ├── status
│   ├── syscall
│   ├── uid_map
│   └── wchan
├── uid_map
└── wchan

21 directories, 164 files
[root@d Polly]#

注意  pid -> pid:[4026531836]

[root@d Polly]# tree /proc/4422
/proc/4422
├── attr
│   ├── current
│   ├── exec
│   ├── fscreate
│   ├── keycreate
│   ├── prev
│   └── sockcreate
├── autogroup
├── auxv
├── cgroup
├── clear_refs
├── cmdline
├── comm
├── coredump_filter
├── cpuset
├── cwd -> /data/mapReduceVisitorLog/mapReduceLogAUTO
├── environ
├── exe -> /root/anaconda3/bin/python3.5
├── fd
│   ├── 0 -> /dev/null
│   ├── 1 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
│   ├── 2 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
│   └── 3 -> /data/mapReduceVisitorLog/a/visit-2018-12-12
├── fdinfo
│   ├── 0
│   ├── 1
│   ├── 2
│   └── 3
├── gid_map
├── io
├── limits
├── loginuid
├── maps
├── mem
├── mountinfo
├── mounts
├── mountstats
├── net
│   ├── anycast6
│   ├── arp
│   ├── connector
│   ├── dev
│   ├── dev_mcast
│   ├── dev_snmp6
│   │   ├── eth0
│   │   ├── eth1
│   │   └── lo
│   ├── fib_trie
│   ├── fib_triestat
│   ├── icmp
│   ├── if_inet6
│   ├── igmp
│   ├── igmp6
│   ├── ip6_flowlabel
│   ├── ip6_mr_cache
│   ├── ip6_mr_vif
│   ├── ip_mr_cache
│   ├── ip_mr_vif
│   ├── ip_tables_matches
│   ├── ip_tables_names
│   ├── ip_tables_targets
│   ├── ipv6_route
│   ├── mcfilter
│   ├── mcfilter6
│   ├── netfilter
│   │   └── nf_log
│   ├── netlink
│   ├── netstat
│   ├── packet
│   ├── protocols
│   ├── psched
│   ├── ptype
│   ├── raw
│   ├── raw6
│   ├── route
│   ├── rpc
│   │   ├── auth.unix.gid
│   │   │   ├── channel
│   │   │   ├── content
│   │   │   └── flush
│   │   └── auth.unix.ip
│   │   ├── channel
│   │   ├── content
│   │   └── flush
│   ├── rt6_stats
│   ├── rt_acct
│   ├── rt_cache
│   ├── snmp
│   ├── snmp6
│   ├── sockstat
│   ├── sockstat6
│   ├── softnet_stat
│   ├── stat
│   │   ├── arp_cache
│   │   ├── ndisc_cache
│   │   └── rt_cache
│   ├── tcp
│   ├── tcp6
│   ├── udp
│   ├── udp6
│   ├── udplite
│   ├── udplite6
│   ├── unix
│   ├── wireless
│   └── xfrm_stat
├── ns
│   ├── ipc -> ipc:[4026531839]
│   ├── mnt -> mnt:[4026531840]
│   ├── net -> net:[4026531956]
│   ├── pid -> pid:[4026531836]
│   └── uts -> uts:[4026531838]
├── numa_maps
├── oom_adj
├── oom_score
├── oom_score_adj
├── pagemap
├── personality
├── projid_map
├── root -> /
├── sched
├── sessionid
├── smaps
├── stack
├── stat
├── statm
├── status
├── syscall
├── task
│   └── 4422
│   ├── attr
│   │   ├── current
│   │   ├── exec
│   │   ├── fscreate
│   │   ├── keycreate
│   │   ├── prev
│   │   └── sockcreate
│   ├── auxv
│   ├── cgroup
│   ├── clear_refs
│   ├── cmdline
│   ├── comm
│   ├── cpuset
│   ├── cwd -> /data/mapReduceVisitorLog/mapReduceLogAUTO
│   ├── environ
│   ├── exe -> /root/anaconda3/bin/python3.5
│   ├── fd
│   │   ├── 0 -> /dev/null
│   │   ├── 1 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
│   │   ├── 2 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
│   │   └── 3 -> /data/mapReduceVisitorLog/a/visit-2018-12-12
│   ├── fdinfo
│   │   ├── 0
│   │   ├── 1
│   │   ├── 2
│   │   └── 3
│   ├── gid_map
│   ├── io
│   ├── limits
│   ├── loginuid
│   ├── maps
│   ├── mem
│   ├── mountinfo
│   ├── mounts
│   ├── ns
│   │   ├── ipc -> ipc:[4026531839]
│   │   ├── mnt -> mnt:[4026531840]
│   │   ├── net -> net:[4026531956]
│   │   ├── pid -> pid:[4026531836]
│   │   └── uts -> uts:[4026531838]
│   ├── numa_maps
│   ├── oom_adj
│   ├── oom_score
│   ├── oom_score_adj
│   ├── pagemap
│   ├── personality
│   ├── projid_map
│   ├── root -> /
│   ├── sched
│   ├── sessionid
│   ├── smaps
│   ├── stack
│   ├── stat
│   ├── statm
│   ├── status
│   ├── syscall
│   ├── uid_map
│   └── wchan
├── uid_map
└── wchan

21 directories, 168 files
[root@d Polly]# tree /proc/22288
/proc/22288
├── attr
│   ├── current
│   ├── exec
│   ├── fscreate
│   ├── keycreate
│   ├── prev
│   └── sockcreate
├── autogroup
├── auxv
├── cgroup
├── clear_refs
├── cmdline
├── comm
├── coredump_filter
├── cpuset
├── cwd -> /data/mapReduceVisitorLog/mapReduceLogAUTO
├── environ
├── exe -> /root/anaconda3/bin/python3.5
├── fd
│   ├── 0 -> /dev/null
│   ├── 1 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
│   └── 2 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
├── fdinfo
│   ├── 0
│   ├── 1
│   └── 2
├── gid_map
├── io
├── limits
├── loginuid
├── maps
├── mem
├── mountinfo
├── mounts
├── mountstats
├── net
│   ├── anycast6
│   ├── arp
│   ├── connector
│   ├── dev
│   ├── dev_mcast
│   ├── dev_snmp6
│   │   ├── eth0
│   │   ├── eth1
│   │   └── lo
│   ├── fib_trie
│   ├── fib_triestat
│   ├── icmp
│   ├── if_inet6
│   ├── igmp
│   ├── igmp6
│   ├── ip6_flowlabel
│   ├── ip6_mr_cache
│   ├── ip6_mr_vif
│   ├── ip_mr_cache
│   ├── ip_mr_vif
│   ├── ip_tables_matches
│   ├── ip_tables_names
│   ├── ip_tables_targets
│   ├── ipv6_route
│   ├── mcfilter
│   ├── mcfilter6
│   ├── netfilter
│   │   └── nf_log
│   ├── netlink
│   ├── netstat
│   ├── packet
│   ├── protocols
│   ├── psched
│   ├── ptype
│   ├── raw
│   ├── raw6
│   ├── route
│   ├── rpc
│   │   ├── auth.unix.gid
│   │   │   ├── channel
│   │   │   ├── content
│   │   │   └── flush
│   │   └── auth.unix.ip
│   │   ├── channel
│   │   ├── content
│   │   └── flush
│   ├── rt6_stats
│   ├── rt_acct
│   ├── rt_cache
│   ├── snmp
│   ├── snmp6
│   ├── sockstat
│   ├── sockstat6
│   ├── softnet_stat
│   ├── stat
│   │   ├── arp_cache
│   │   ├── ndisc_cache
│   │   └── rt_cache
│   ├── tcp
│   ├── tcp6
│   ├── udp
│   ├── udp6
│   ├── udplite
│   ├── udplite6
│   ├── unix
│   ├── wireless
│   └── xfrm_stat
├── ns
│   ├── ipc -> ipc:[4026531839]
│   ├── mnt -> mnt:[4026531840]
│   ├── net -> net:[4026531956]
│   ├── pid -> pid:[4026531836]
│   └── uts -> uts:[4026531838]
├── numa_maps
├── oom_adj
├── oom_score
├── oom_score_adj
├── pagemap
├── personality
├── projid_map
├── root -> /
├── sched
├── sessionid
├── smaps
├── stack
├── stat
├── statm
├── status
├── syscall
├── task
│   └── 22288
│   ├── attr
│   │   ├── current
│   │   ├── exec
│   │   ├── fscreate
│   │   ├── keycreate
│   │   ├── prev
│   │   └── sockcreate
│   ├── auxv
│   ├── cgroup
│   ├── clear_refs
│   ├── cmdline
│   ├── comm
│   ├── cpuset
│   ├── cwd -> /data/mapReduceVisitorLog/mapReduceLogAUTO
│   ├── environ
│   ├── exe -> /root/anaconda3/bin/python3.5
│   ├── fd
│   │   ├── 0 -> /dev/null
│   │   ├── 1 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
│   │   └── 2 -> /data/mapReduceVisitorLog/mapReduceLogAUTO/nohup.out
│   ├── fdinfo
│   │   ├── 0
│   │   ├── 1
│   │   └── 2
│   ├── gid_map
│   ├── io
│   ├── limits
│   ├── loginuid
│   ├── maps
│   ├── mem
│   ├── mountinfo
│   ├── mounts
│   ├── ns
│   │   ├── ipc -> ipc:[4026531839]
│   │   ├── mnt -> mnt:[4026531840]
│   │   ├── net -> net:[4026531956]
│   │   ├── pid -> pid:[4026531836]
│   │   └── uts -> uts:[4026531838]
│   ├── numa_maps
│   ├── oom_adj
│   ├── oom_score
│   ├── oom_score_adj
│   ├── pagemap
│   ├── personality
│   ├── projid_map
│   ├── root -> /
│   ├── sched
│   ├── sessionid
│   ├── smaps
│   ├── stack
│   ├── stat
│   ├── statm
│   ├── status
│   ├── syscall
│   ├── uid_map
│   └── wchan
├── uid_map
└── wchan

21 directories, 164 files
[root@d Polly]#

 

fork(2) - Linux man page的更多相关文章

  1. #include <sys/epoll.h> epoll - I/O event notification facility 服务器端 epoll(7) - Linux manual page http://www.man7.org/linux/man-pages/man7/epoll.7.html

    epoll使用详解(精髓) - Boblim - 博客园 https://www.cnblogs.com/fnlingnzb-learner/p/5835573.html epoll使用详解(精髓) ...

  2. mkbundle(1) - Linux man page

    mkbundle(1) - Linux man page Name mkbundle, mkbundle2 - Creates a bundled executable. Synopsis mkbun ...

  3. Linux - man page

    使用man date来查看date命令的详细信息. lucifer@lucifer-virtual-machine:~$ man date DATE(1) User Commands DATE(1) ...

  4. 1 多任务fork Unix/Linux/Mac

    # 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以 1.如下程序,来模拟“唱歌跳舞”这件事情 #-*- coding:utf-8 -*- import time de ...

  5. Linux的page cache使用情况/命中率查看和操控

    转载自宋宝华:https://blog.csdn.net/21cnbao/article/details/80458173 这里总结几个Linux文件缓存(page cache)使用情况.命中率查看的 ...

  6. dhcpd.conf(5) - Linux man page

    http://linux.die.net/man/5/dhcpd.conf Name dhcpd.conf - dhcpd configuration file Description   The d ...

  7. linux 排查page的状态问题

    最近遇到一个page的释放异常的问题,堆栈如下: [ 1000.691858] BUG: Bad page state in process server.o pfn:309d22 [ mapcoun ...

  8. 谨慎使用多线程中的fork 学习!!!!

    前言 在单核时代,大家所编写的程序都是单进程/单线程程序.随着计算机硬件技术的发展,进入了多核时代后,为了降低响应时间,重复充分利用多核cpu的资源,使用多进程编程的手段逐渐被人们接受和掌握.然而因为 ...

  9. CS:APP3e 深入理解计算机系统_3e ShellLab(tsh)实验

    详细的题目要求和资源可以到 http://csapp.cs.cmu.edu/3e/labs.html 或者 http://www.cs.cmu.edu/~./213/schedule.html 获取. ...

随机推荐

  1. jquery.attach附件上传jquery插件

    html: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv=&qu ...

  2. SharePoint 2013 workflow cannot start automatically when you logged in site as a system account

    I have created one simple workflow on custom list using SharePoint designer 2013.While designing wor ...

  3. Learning Deep CNN Denoiser Prior for Image Restoration阅读笔记

    introduction 图像恢复目标函数一般形式: 前一项为保真项(fidelity),后一项为惩罚项,一般只与去噪有关. 基于模型的优化方法可以灵活地使用不同的退化矩阵H来处理不同的图像恢复问题, ...

  4. [转]wcout输出中文却不显示出来

    准备使用UNICODE来写个控制台测试程序发现,cout无法输出UNICODE的中文字符.查找C++标准看到,其提供了wcin.wcout.wcerr.wclog用于处理wchar_t字符的输入输出. ...

  5. 创建ros的程序包--3

    创建ros的程序包(原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/) 1.一个catkin程序包由什么组成? 一个程序包要想称为catkin程序 ...

  6. jquery 中的回调函数,回调函数(callback)是什么?

    知乎上果然大牛比较多 大神解释如下: 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货.在这个例子里, ...

  7. 处理URL为模块/控制器/方法的格式

    一个路由在不确定长度的情况下,控制器和方法不一定传参进来,可能只有模块,甚至模块都没有,这个时候需要特殊处理一下,默认模块用 index,默认控制器用index,默认方法用 index来处理URL. ...

  8. 用rman恢复备库;遇到备库起不来一个案例 ORA-01152:ORA-01110

    数据从主库恢复到备库:打开备库发现出现异常 SQL> alter database open; alter database open * ERROR at line 1: ORA-10458: ...

  9. Maven(二)-- 搭建私服,上传jar

    一.在setting中配置 私服的镜像,在mirrors标签中加上: <!--第一步 配置私服的镜像--> <mirror> <!--此处配置所有的构建均从私有仓库中下载 ...

  10. JavaScript的记忆函数真的可以提升性能吗?

      1 记忆函数是什么呢? 让函数记住曾经计算过的参数对应的结果 2 那我们为什么使用记忆函数呢? 答案是 避免重复计算 3 在工作中如何使用和实现函数记忆 ? 形成闭包,在闭包中维护一个哈希数组(其 ...