首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mac开发基础练习:制作一个状态栏(NSStatusBar)的App(二)

为了响应系统的鼠标事件,我们需要使用Cocoa框架中的NSEvent类来为应用添加监听对象,Mac 开发中,通常我们都是被(鼠标或键盘)事件驱动的,当OSX系统接收到一个事件后,会添加到窗口服务进程的处理队列中...添加按钮响应代码 再次运行应用,如果没有错误,点击状态栏图标,界面大概样子应该入下图: ? 应用运行效果 点击退出按钮,你会发现应用将结束进程并退出。...现在我们这个应用可以实现显示popover,并点击应用之外的地方可以隐藏popover,并可以手动退出应用,这些基本功能已经都完成了,但从项目开始到现在,window窗口一直都伴随每次启动显示(它在我们这个应用看起来没什么用处...结束语 项目小练习只是一个学习的开始,大家可以对这个小练习再添加一些功能:比如菜单栏,比如设置开机自动启动,再或者运行后隐藏Dock的图标,对代码结构再进行合理的组织,比如把事件监听的方法,封装为一个工具类...,或者使用tableview代替SBPopViewController,添加网络请求数据等,这样就可以由这个小练习慢慢变成自己的一个小Mac 应用了,祝各位能有所收获~。

1.4K30

教你写一个守护进程

守护进程是一种生存期很长的一种进程,它们一般系统启动时开始运行,除非强行终止,否则直到系统关机都会保持运行。...当控制终端被关闭的时候,该会话就会退出,由控制终端运行的所有进程都会被终止,这使得普通进程都是和运行该进程的终端相绑定的;但守护进程能突破这种限制,它脱离终端并且在后台运行,脱离终端的目的是为了避免进程在运行的过程中的信息终端显示并且进程也不会被任何终端所产生的信息所打断...第一,如果该守护进程是作为一条简单地 shell 命令启动,那么父进程终止会让 shell 认为这条命令已经执行完毕。...处理 SIGCHLD 信号不是必须的,但对于某些进程,特别是并发服务器进程往往是特别重要的,服务器进程接收到客户端请求时会创建子进程去处理该请求,如果子进程结束之后,父进程没有去 wait 回收子进程...守护进程可以通过终端命令行启动,但通常它们是由系统初始化脚本进行启动,譬如/etc/rc*或 /etc/init.d/*等。

1.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

OSX SIP机制的“那些事”

disable关闭SIP(csrutil enable打开SIP) (4)重启reboot OSX 这个方法我之前介绍《OSX内核调试技术分享》这篇文章中也提到过(链接),其实网上关闭SIP也都是这个...其实可以看出,它和我们用nvram得到的系统启动项是一样的,大家可以自己试下,命令行: nvram -xp,它主要是得到系统的启动项值,各个启动项值,大家可以自行查资料进行参考 我们从反编译csrutil...其实我们能过IODeviceTree:/options的值可以看出这里就是操作系统的启动选项,当操作系统启动选项中存在csr-active-config的值的时候,我们就关闭了SIP,好在我们的OSX是开源的项目...SIP相关保护的目的,当值为0x77(1110111)的时候,整个rootless将关闭各种文件保护,以及运行时保护等。...这样基本我们就把上面是如何关闭SIP的原理搞清楚了,前几天我Github正好也看到了一位国外牛人,写了个关于SIP exploit(源代码链接),我们这里也来分析一下这个exploit的原理,先gitclone

2.6K50

从进程组、会话、终端的概念深入理解守护进程

与普通进程相比它大概有如下特点: 无需控制终端(不需要与用户交互) 在后台运行 生命周期比较长,一般是随系统启动关闭 守护进程必要性 为什么要设置为守护进程,普通进程不可以吗?...当我们命令行提示符后输入类似./helloworld程序时,程序运行时终端被占用,此时无法执行其它操作。即使使用..../helloworld &方式后台运行,当连接终端的网络出现问题,那么也会导致运行程序中断。这些因素对于长期运行的服务来说很不友好,而「守护进程」可以很好的解决这个问题。...此时守护进程与终端脱离,常说的输入、输出、错误描述符也应该关闭守护进程的出错处理 由于守护进程脱离了终端,不能将错误信息输出到控制终端,即使 gdb 也无法正常调试。...syslog 是 Linux 中的系统日志管理服务,通过守护进程 syslogd 来维护。该守护进程启动时会读一个配置文件/etc/syslog.conf。该文件决定了不同种类的消息会发送向何处。

1K20

数据库PostrageSQL-关闭服务器

关闭服务器 有几种关闭数据库服务器的方法。通过给postgres进程发送不同的信号,你就可以控制关闭类型。 SIGTERM 这是智能关闭模式。...如果服务器恢复时请求智能关闭,恢复和流复制只有在所有正常会话都终止后才停止。 SIGINT 这是快速关闭模式。...主服务器进程将在所有子进程退出之后立刻退出,而无需做普通的数据库关闭处理。这将导致在下一次启动时(通过重放WAL 日志)恢复。只紧急 时才推荐这种方式。...pg_ctl程序提供了一个发送这些信号关闭服务器的方便的接口。 另外,你非 Windows 系统可以用kill直接发送这些信号。...可以用ps程序或者从数据目录的postmaster.pid文件中找到postgres进程PID。

3.5K20

Redis系列教程之环境安装与基础配置

Redis作为一种单线程的服务,在运行的过程中也使用到了单线程轮询机制,在网络模型用到了epoll;而Windows的网络模型selector;两种网络模型从性能上来说,epoll比selector...Mac推荐使用brew包管理工具进行安装,Linux发行版,Ubuntu的可以使用apt-get包管理工具、Centos推荐使用yum包管理工具。...redis-server /usr/local/redis/redis.conf守护进程启动什么叫守护进程呢,上面安装的几种启动方式,在你运行启动Redis服务器后,会出现如下的内容:当你关闭该窗口,就会发现...Redis链接不,这是因为关闭窗口时,Redis服务就自动退出。...2、Redis如何守护进程的方式运行?3、Redis中如何配置端口号,以及日志文件。

11410

.NET Core 跨平台执行命令、脚本

arguments:进程启动时传递给应用程序命令行参数。 (2)主要属性 CreateNoWindow:指示是否新窗口中启动进程。...Process 类 该类的主要作用是提供对本地和远程进程的访问,并使你能够启动和停止本地系统进程。 (1).主要属性 ExitCode:获取退出代码。0表示正常, 非0表示非正常退出。...3.OSX运行OSX的.NET Core SDK版本为2.0.0 很久没更新了。 直接执行命令: ? 从git Clone代码,执行结果如下: ?...可以看出我们OSX执行是没有问题的。...windows下运行是完全正常的。 4.OSX运行 直接运行会报一个权限异常,如下: ? 使用命令加入执行权限: chmod +x OSX.sh 然后再次执行: ? 可以看到成功执行了脚本。

1.9K20

远程管理 Mac OSX 设备

为了服务的稳定运行,这里我们还是使用 supervisor 进行进程管理和运行守护,如果有不会配置的同学可以翻看以往的文章或者自行搜索。.../frps.ini ; 随 supervisord 启动 autostart = true ; 程序启动 5s 内没有异常则认为是正常运行 startsecs = 10 ; 程序异常退出后重新启动 autorestart...Mac OSX 系统的进程管理,一篇文章已经提到过,这里不做赘述,简单提供一个 supervisor 配置。.../frp/frpc -c /Users/soulteary/Service/frp/frpc.ini ; 随 supervisord 启动 autostart = true ; 程序启动 5s 内没有异常则认为是正常运行...startsecs = 10 ; 程序异常退出后重新启动 autorestart = true ; 重试启动程序多少次 startretries = 1000 ; 默认使用当前用户执行应用 ;user

80620

Postgresql进程与内存结构

进程 进程结构 Postgresql使用多进程架构实现(Mysql为多线程),PG启动时会拉起守护进程,然后由守护进程fork相关的后台辅助进程。...守护进程的另一个作用是监听客户端的连接请求,当client发起连接时,守护进程会fork服务进程来处理client发送过来的命令,每有一个连接,后台就会存在一个服务进程。...| \_ psql 可以看到psql进程启动后,PG守护进程fork了一个子进程来为连接服务。...守护进程启动顺序 初始化内存上下文 读取参数配置 创建监听套接字 注册信号处理函数 启动辅助进程 装载认证文件 启动完毕,等待连接… 一个正常启动的postgresql守护进程的调用栈: #0 __...PG使用共享内存作为主要的数据共享、进程通信的方式。

76630

Not Only SQL (一) - Redis Introduce

redis.conf存放在/usr/local/etc路径下三、Redis启动 启动Redis服务 进入命令行终端 cd /usr/local/redis # 启动redis服务 ....指定Redis监听端口,默认端口为6379,作者自己的一篇博文中解释了为什么选用6379作为默认端口,因为 6379在手机按键MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字...启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到 期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操 作。...但当daemonize选项设置成no时,当前界面将进 入redis的命令行界面,exit强制退出或者关闭连接工具(putty,xshell等)都会导致redis进程退出。...可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可 以让你的 redis 服务更安全 五、Redis关闭 第一种关闭方式: (断电、非正常关闭

26030

Universe入门

brew install golang libjpeg-turbo 安装Docker Universe中的大部分环境Docker容器中运行,所以需要安装Docker(OSX,推荐Docker for...STATUS PORTS 备用配置 - docker中运行智能体 通过以上配置,智能操作系统中会作为常规python进程来运行,并根据远程需要启动docker容器...它能够接收智能体的操作,将智能体代理到 远程,等待智能体的奖赏队列以及维护当前事件状态的本地视图。 -远程是运行环境的动力,通常是Docker容器内部运行程序。...运行你的第一个智能体 现在已经安装了universe库,确保它能正常工作,试试用python运行下面的例子。(可能需要输入一段时间来确保while循环正在执行。)...如果你Mac,连接到VNC服务器更加简单`open vnc://localhost:5900`。

2.9K60

golang子进程的启动和停止,mac与linux的区别

跟想象中的也差不多,搭建好linux测试服务器,mac运行很久的应用重新交叉编译了一遍,部署到linux实验环境,启动、测试,看起来一切正常。准备打包交活,这时候发现一个问题,程序无法终止。...这段代码启动子进程和关闭子进程mac电脑的原有系统上工作都很正常,但是到了linux,启动子进程仍然没有问题,关闭子进程不成功。...而发出退出命令的时候,只有sh退出了,sleep进程仍然继续运行。对比同样的mac电脑,sh进程是没有出现的,只有一个sleep进程,所以发出退出命令的时候,sleep正常关闭,系统表现正常。...,linux也只有sleep这一个进程被建立,直接向其发出退出指令是可以正常工作的。...sh启动了另外一个子进程,这种方法就无效了(指在linux无效,mac测试是一样可以用的,关键区别同样是mac,/bin/sh进程不会保留并等待我们启动的子进程退出,所以退出消息可以正常的发送到正常的子进程

4.5K50

Netty Review - 探究Netty服务端主程序无异常退出的背后机制

概述 使用Netty进行服务端程序开发时,初学者可能会遇到各种问题,其中之一就是服务端意外退出的问题。这种问题可能会出现在程序启动后,没有发生任何异常的情况下,突然退出。...这是因为Netty采用了异步的事件驱动模型,调用bind方法时,实际是注册了一个事件监听器,在后续端口绑定完成时会通过NioEventLoop线程执行相应的逻辑。...NioEventLoop是非守护线程 NioEventLoop运行之后,不会主动退出 只有调用shutdown系列方法,NioEventLoop才会退出 我们写的程序调用Netty的shutdownGracefully...,由于finally中增加了线程池关闭代码,NioEventoop 线程主动退出,系统中没有正在运行的非守护线程了,所以JVM 进程退出。...这样可以保证主线程服务端关闭之前不会退出,从而确保服务端的正常运行

6900

开发人员和管理员必须掌握的25个Nginx命令(

sudo killall -9 nginx 3、退出Nginx服务器 退出Nginx服务器类似于停止服务器-唯一的区别是。Nginx守护程序采用了一种优雅的方法来退出,因为它不会中断任何活动的连接。...因此,您的客户请求将在关闭之前按预期的方式提供。 sudo service nginx quit 使用此命令从Linux shell退出Nginx服务器。...您可以使用以下命令之一从命令行重新启动Nginx守护程序。 sudo service nginx restart 此命令将使用System V初始化脚本重新启动Nginx服务器。...重新加载服务器时,Nginx将以正常方式关闭。这意味着Nginx守护程序将首先终止,然后解析配置文件以进行尝试的更改,并在不中断操作的情况下启动新的工作进程。...运行此命令时,基本告诉Nginx检查配置文件中的语法错误,并避免运行服务器。您可以使用以下命令终端控制台上转储配置测试的结果。

70920

【Android Gradle 插件】Gradle 基础配置 ⑥ ( Android工程 Gradle 常用命令 | gradlew 可执行文件 | 查看帮助文档 | 查看应用依赖 )

--daemon 使用Gradle守护进程运行构建。如果未运行,则启动守护进程。...[孵化] -F, --dependency-verification 配置依赖性验证模式(严格、宽松或关闭)[孵化] --foreground 在前台启动...-M, --write-verification-metadata 为项目中使用的依赖项生成校验和(逗号分隔列表)[孵化] -m, --dry-run 禁用所有任务操作的情况下运行生成...[孵化] --no-daemon 不要使用Gradle守护程序运行构建。如果您已将Gradle配置为默认情况下始终与守护程序一起运行,则偶尔会有用。...--priority 指定Gradle守护进程及其启动的所有进程的调度优先级。

1.4K30

数据库PostrageSQL-启动数据库服务器

启动数据库服务器 在任何人可以访问数据库前,你必须启动数据库服务器。 数据库服务器程序postgres,它必须知道在哪里能找到它要用的数据。这是用-D选项实现的。...不同的系统引导时有不同的启动守护进程的习惯。许多系统有一个文件/etc/rc.local或/etc/rc.d/rc.local。其他的使用init.d或rc.d目录。...NetBSD,你可以根据爱好选择FreeBSD或Linux的启动脚本。...当服务器在运行时,它的PID被保存在数据目录中的postmaster.pid文件。这样做 可以防止多个服务器实例运行在同一个数据目录中,并且也可以被用来关闭服务器。 18.3.1....作为一种临时的解决方案, 你可以试着以小于正常数量的缓冲区(shared_buffers)启动服务器。 你最终还是会希望重新配置内核以增加共享内存允许的尺寸。

4.2K20

【Java虚拟机】JVM诊断神器Arthas入门实操

127.0.0.1,所以如果想从远程连接,使用 --target-ip参数指定 listen 的 IP快速使用启动 java -jar arthas-boot.jar 图片运行日志路径 ~/logs/...arthas/arthas.log 图片退出 arthas如果只是退出当前的连接,其他客户端不受影响,可以用 quit或者exit命令目标进程的 arthas 还会继续运行,端口保持开放,下次连接时执行...Arthas 客户端,其他 Arthas 客户端不受影响reset - 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类session - 查看当前会话的信息...stop - 关闭 Arthas 服务端,所有 Arthas 客户端全部退出tee - 复制标准输入到标准输出和指定的文件,和 linux 里的 tee 命令类似图片3.Arthas常用JVM命令案例实战...程序,需要在线调试,不重启JVM程序,动态调整,打印参数或修改方法内部逻辑。

43600

并发基础篇(一): 线程介绍

就绪状态是指线程具备运行的所有条件,逻辑可以运行等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程等待一个事件(如某个信号量),逻辑不可执行。...引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。...补充说明: 定义:守护线程--也称“服务线程”,没有用户线程可服务时会自动离开。 优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。...example: 垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM仅剩的线程时,垃圾回收线程会自动离开...如果我们手工使用JDK Timer(Quartz的Scheduler),Web容器启动启动Timer,当Web容器关闭时,除非你手工关闭这个Timer,否则Timer中的任务还会继续运行

41230
领券